【问题标题】:file write not working from terminal but works from browser文件写入不能从终端工作,但可以从浏览器工作
【发布时间】:2012-06-12 12:32:08
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 我想看看你文件的代码。没有看到它,很难猜到。
  • ok..用文件编写代码编辑了问题。这很简单。

标签: php unix terminal


【解决方案1】:

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

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

【讨论】:

  • 是的..这就是问题所在。虽然@vinay 首先向我指出了那里,但我排除了你的答案,因为它很容易理解。
【解决方案2】:

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

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

【讨论】:

  • 文件的权限是 0777。所以我认为权限不会有问题。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    chown your_username:www-data filename
    

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

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

    chmod g+w filename
    

    【讨论】:

      猜你喜欢
      • 2020-07-10
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多