Como faço para carregar um arquivo PHP em uma variável?

98

Preciso carregar um arquivo PHP em uma variável. Gostarinclude();

Carreguei um arquivo HTML simples como este:

$Vdata = file_get_contents("textfile.txt");

Mas agora preciso carregar um arquivo PHP.

Kombuwa
fonte

Respostas:

116

Suponho que você deseja obter o conteúdo gerado pelo PHP , se assim for, use:

$Vdata = file_get_contents('http://YOUR_HOST/YOUR/FILE.php');

Caso contrário, se você deseja obter o código-fonte do arquivo PHP , é o mesmo que um arquivo .txt:

$Vdata = file_get_contents('path/to/YOUR/FILE.php');
Alix Axel
fonte
6
e se eu quiser obter "o conteúdo gerado pelo PHP" sem usar http e usar diretamente o caminho?
Osa,
4
@Osa: Dependendo de suas necessidades, você provavelmente poderia usar eval()ou se estiver lidando com um código mais complicado: github.com/nikic/PHP-Parser .
Alix Axel de
2
implementar um analisador de php apenas para isso parece um grande exagero
David Fariña
1
Não vejo como isso vai passar no POST ou GET. Acho que a resposta de neobie seria mais correta e apropriada, já que o arquivo PHP externo seria processado no contexto do atual.
ADTC de
Usando o exemplo acima, você pode usar get_template_directory_uri () e unir ao caminho do arquivo. Isso resolverá o problema de usar um caminho direto. $Vdata = file_get_contents(get_template_directory_uri() . '/path/to/file/in/theme.text');
Ian Bruce
124
ob_start();
include "yourfile.php";
$myvar = ob_get_clean();

ob_get_clean ()

neobie
fonte
1
Isso funciona! Mas sempre que tento incluir: yourfile.php? Id = 3, não funciona. Alguma sugestão?
tvgemert
1
Como você não está mais usando http, você precisa passar os valores por $ _GET nesse caso.
Francesco Belladonna
Que tal as imagens?
kta
1
Dica: Desde o PHP 4.3.0, você pode encurtar as duas últimas linhas para apenas $myvar = ob_get_clean();(veja a documentação ob_get_clean )
ADTC
Perfeito! Obrigado.
lowtechsun
7

Se estiver usando http: // , como sugerido por eyze, você só conseguirá ler a saída do script PHP. Você só pode ler o próprio script PHP se estiver no mesmo servidor que o script em execução. Você poderia então usar algo como

$Vdata = file_get_contents('/path/to/your/file.php");
Jonathan Weiss
fonte
oi, isso só pegue html estático. veja este exemplo. se este for o arquivo que iremos carregar; ///////////////// <? php echo ("text1"); ?> Texto2 /////////////// esta é a saída que obtive; ////////////////////// Text2 /////////////////////
Kombuwa
@Kombuwa, você poderia, por favor, esclarecer sua resposta em uma edição da sua pergunta original, onde você tem mais espaço para explicar claramente? Obrigado =)
David diz para restabelecer Monica em
7

Se você deseja carregar o arquivo sem executá-lo através do servidor web, o seguinte deve funcionar.

$string = eval(file_get_contents("file.php"));

Isso irá carregar e avaliar o conteúdo do arquivo. O arquivo PHP precisará ser totalmente formado com as tags <?phpe ?>para evalavaliá-lo.

Jess
fonte
Eu gosto desse método. Só que meu arquivo não está totalmente formado com as tags <? Php e?> Para eval avaliá-lo. Existe alguma outra maneira?
ItsMeDom
4

Teoricamente, você poderia apenas usar fopen e, em seguida, usar stream_get_contents.

$stream = fopen("file.php","r");
$string = stream_get_contents($stream);
fclose($stream);

Isso deve ler todo o arquivo em $ string para você, e não deve avaliá-lo. Embora esteja surpreso que file_get_contents não funcionou quando você especificou o caminho local ....

Zeroshade
fonte
3

Alternativamente, você pode iniciar o buffer de saída, fazer um include / require e então parar o buffer. Com ob_get_contents (), você pode apenas obter o que foi gerado por aquele outro arquivo PHP em uma variável.

Alex Weinstein
fonte
3

Se o seu arquivo tiver uma declaração de retorno como esta:

<?php return array(
  'AF' => 'Afeganistão',
  'ZA' => 'África do Sul',
  ...
  'ZW' => 'Zimbabué'
);

Você pode transformar isso em uma variável como esta:

$data = include $filePath;
António Almeida
fonte
1
plus1 Obrigado, isso é o que eu estava procurando
whitesiroi
1

file_get_contents () não funcionará se seu servidor tiver allow_url_fopen desligado. A maioria dos hosts da Web compartilhados o desativam por padrão devido a riscos de segurança. Além disso, no PHP6 , a opção allow_url_fopen não existirá mais e todas as funções agirão como se estivessem permanentemente desligadas. Portanto, este é um método muito ruim de se usar.

Se você estiver acessando o arquivo por meio de http, sua melhor opção é cURL

Marca
fonte