【问题标题】:How to write to file from command line PHP?如何从命令行 PHP 写入文件?
【发布时间】:2012-06-28 11:12:10
【问题描述】:

我正在尝试编写一些命令行 PHP - 使用 PHP 从命令行写入文件是否有技巧?该文件名为 testcl.php,我使用以下命令执行它:

/usr/bin/php -f /var/www/html/media/testcli.php

$myFile = "test.txt";
$fh = fopen($myFile, 'a');
fwrite($fh, "batman2");
fclose($fh);
echo "batman";

batman echo 语句有效,所以我知道文件正在运行 - 但由于某种原因它没有写入 test.txt。如果我访问 testcli.php 它会成功写入 text.txt - 所以我想我错过了一些技巧。

【问题讨论】:

    标签: php shell command-line


    【解决方案1】:

    我怀疑你有 CWD 问题:test.txt 是一个相对路径,所以它会根据你在调用脚本时所处的位置进行计算 - 这可能在 shell 和网络服务器上有所不同。试试

    $myFile=dirname(__FILE__).'/test.txt';
    

    也可能是权限问题:请确保您对 websrver 目录具有写入权限。

    【讨论】:

    • 确认,我遇到了同样的问题,问题是我使用的是相对路径——文件是相对于 CL 脚本而不是 PHP 脚本编写的。谢谢!
    【解决方案2】:

    这可能是权限问题。尝试使用:

    sudo /usr/bin/php -f /var/www/html/media/testcli.php

    【讨论】:

      【解决方案3】:

      在运行 php 代码之前,我会 cd 到 /var/www/html/media/。还要确保当前用户可以写入该目录/

      【讨论】:

        【解决方案4】:

        两种可能:

        • 当您从 Web 服务器运行 PHP 时,它始终以当前目录设置为包含脚本的目录运行。当您从命令行运行 PHP 时,工作目录将保持不变。检查您的 cwd 以获取输出文件。

        • 如果该文件不存在,则可能是您运行 php-cli 的用户没有写入其当前目录的权限。

        【讨论】:

          【解决方案5】:

          相对于 OP 问题。 例如,如果我们有两个文件,一个是log.php,它写入log.txt 文件,并且都位于C:/MAMP/htdocs.Log.php 包含:

          <?php
           $txt = "user id date";
           $myfile = file_put_contents(dirname(__FILE__).'/logs.txt', $txt.PHP_EOL , FILE_APPEND | LOCK_EX);
          echo dirname(__FILE__);
          ?>
          

          这将在正在执行 log.php 的目录中找到 log.txt 文件:

          php -f C:/MAMP/htdocs/log.php

          ** 这里php设置为环境变量,否则可以使用C:\MAMP\bin\php\php7.1.7\php.exe

          ** 将 php7.1.1 设置为你的 php 版本

          **这个例子是针对MAMP的,可以在其他本地服务器上使用

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-02-09
            • 2022-08-18
            • 2017-03-24
            • 1970-01-01
            • 1970-01-01
            • 2015-01-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多