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.

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');

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 ()


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");

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.


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 ....


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.


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;

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.