我真的需要在代码中使用带有PHP的ob_start。所以我有这个:
ob_start("function123");
所以内部功能“function123”我有这个:
file_put_contents("aaa.txt","xxxx");
但是我无法在任何地方找到这个文件。 PHP脚本具有777权限,file_put_contents正常工作,当我使用它“oustide”“function123”时,它工作正常,文件显示在与PHP脚本相同的路径中。
但是,如果我这样做
file_put_contents("/main/folder/aaa.txt","xxxx");
有效。那么ob_start使用不同的范围/路径来创建文件吗?奇怪的是,如果我将file_get_contents与相对路径一起使用,它的工作原理与之相同:路径与当前PHP脚本路径相对。
答案 0 :(得分:0)
ob_start
函数在调用用户定义的回调时可能会更改PHP进程的工作目录。这是documented in the manual:
某些Web服务器(例如Apache)在调用回调函数时会更改脚本的工作目录。您可以通过例如更改它回调函数中的chdir(dirname($ _ SERVER ['SCRIPT_FILENAME']))。
您可以通过获取脚本路径或文档根目录并使用chdir()自行更改工作目录来解决此问题。
我不确定这是否是问题,因为当我使用Apache 2.4测试时,一切似乎都按预期工作(即回调中没有目录更改)。无论如何,你可能会考虑做这样的事情,在回调之外打开文件,而PHP进程的PWD仍然是好的:
<?php
$handle = fopen('output.txt','w');
$callback = function($buffer, $phase) use($handle) {
fwrite($handle,$buffer);
return '';
};
ob_start($callback);
echo 'Hello, World!' . PHP_EOL;
ob_end_flush();
fclose($handle);