文件写入不是从终端工作,但从浏览器工作

时间:2012-06-08 12:38:57

标签: php unix terminal

我有一个php脚本,它包含一些文本文件写入操作。现在,如果我从浏览器执行脚本,通过使用它的URL访问它,它工作正常,文件写得很完美。但是当我从终端运行相同的脚本时,使用命令,脚本运行但不执行文件操作。我不确定,为什么会这样。我知道这可能是一个愚蠢的事情,或者我错过了一些关键或任何事情,但现在无法解决这个问题。

这是我正在使用的命令

/path/to/php -f /path/to/file

以下是写入文本文件的代码:

$myFile = "filename.txt";
$fh = fopen($myFile, 'a+') or die("can't open file");
$str = "file content here";
fwrite($fh, $str);
fclose($fh);

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

这可能使用不同的路径。例如,当从终端运行时,它将在您运行命令时所在目录中查找“filename.txt”,而从浏览器运行时,它将与您的PHP文件在同一目录中查找。

要解决此问题,请使用完整路径,而不仅仅是您正在访问的文件的文件名。

答案 1 :(得分:1)

这可能是一个许可问题。从浏览器运行脚本时,将使用Web服务器的凭据执行脚本。

为文件/目录设置正确的权限,或以网络服务器的用户身份运行脚本。

答案 2 :(得分:1)

检查路径,使用/var/www/example.com/filename.ext中的路径  而不是http://www.example.com/filename.ext

答案 3 :(得分:0)

ilanco是对的,这可能来自许可问题。在Unix上,解决这个问题的一种方法是:

1。首先,将此文件的所有权提供给命令行用户,并将该组设置为Web服务器。例如,如果服务器是apache,请执行以下命令:

chown your_username:www-data filename

www-data是apache Web服务器的默认组。该命令应该以root身份运行。

2。然后,授予组写入此文件的权限:

chmod g+w filename