我有一个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);
感谢您的帮助。
答案 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