2

我有一个 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

4 回答 4

3

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

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

于 2012-06-08T12:51:45.533 回答
1

这可能是权限问题。当您从浏览器运行脚本时,将使用网络服务器的凭据执行脚本。

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

于 2012-06-08T12:41:42.527 回答
1

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

于 2012-06-08T12:47:35.900 回答
0

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

1. 首先,将此文件的所有权授予命令行用户,并将组设置为网络服务器。例如,如果服务器是apache,执行如下命令:

chown your_username:www-data filename

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

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

chmod g+w filename
于 2012-06-08T12:54:30.370 回答