为什么php文件可以在CLI中工作而不能在浏览器中工作?

为什么php文件可以在CLI中工作而不能在浏览器中工作?,php,html,file,save,Php,Html,File,Save,我有一个php文件,它在从CLI运行时可以正常工作,但是当Chrome通过公共ip地址调用它时,它会发出回声,但不会保存内容,甚至不会创建一个名为cache.html的文件 <?php $cacheFile = '/home/directories/php/cache.html'; ob_start(); echo '<h1>Hello world to cache</h1>'; $content = ob_get_contents(); ob_end_clean(

我有一个php文件,它在从CLI运行时可以正常工作,但是当Chrome通过公共ip地址调用它时,它会发出回声,但不会保存内容,甚至不会创建一个名为cache.html的文件

<?php
$cacheFile = '/home/directories/php/cache.html';
ob_start();
echo '<h1>Hello world to cache</h1>';
$content = ob_get_contents();
ob_end_clean();
file_put_contents($cacheFile,$content);
echo $content;
?>
我担心在我为Apache服务时,手册中关于ob_start的警告;

警告 某些web服务器(例如Apache)在调用回调函数时更改脚本的工作目录。您可以通过回调函数中的chdir(dirname($\u SERVER['SCRIPT\u FILENAME'])等方式将其更改回来

我最初设置
$cachefile=/cache.html
,并通过

file\u put\u contents(chdir(dirname($\u SERVER['SCRIPT\u FILENAME'))$cachefile,$content)

那没用。但是,
$cacheFile='/home/directories/php/cache.html'在CLI中工作正常

我将ob_end_clean()替换为ob_end_flush(),没有任何区别


为什么它在浏览器中失败?我很好奇,但最后我真的想将lamp/php生成的网页保存到本地php项目目录中的一个文件中,格式如下。。供PHPMailer用作附件。这似乎是我前进的最佳途径,但浏览器故障让我难住了。

因为CLI中的php是在运行命令的用户(登录用户)的权限下运行的,用户当然有权访问该目录,因为您可能是从CLI创建此目录的

将目录所有者和权限更改为在浏览器中运行php的用户

sudo chown -R your-apache-user /home/directories/php/
//apache-user you found as mentioned in question below

是的,文件权限

我不想将我的整个项目目录转到运行apache守护程序的“wwwrun”用户,而是创建了一个名为“wwwrun”的新目录。然后,我给了那个用户所有权,可以为所有人写,“0777”,并将我的脚本更改为指向新目录。一切都解决了

这允许我在我的用户下编辑项目,现在wwwrun有了一个写的地方,我的用户也可以访问它。谢谢你的第二双眼睛

> md /home/directories/php/wwwrun
> sudo chown -R wwwrun wwwrun
> sudo chmod -R a+w wwwrun
修改脚本:
$cacheFile='/home/directories/php/wwwrun/cache.html'


附带问题:这被认为是不安全的做法吗?

我敢打赌,您的脚本没有权限从匿名执行(如httpYes)修改目录。是的,如果您没有与其他用户共享服务器,他们可以在同一个wwwrun用户下运行php脚本,因为他们也可以读/写该目录。
> md /home/directories/php/wwwrun
> sudo chown -R wwwrun wwwrun
> sudo chmod -R a+w wwwrun