如何从命令行 PHP 写入文件


How to write to file from command line PHP?

我正在尝试编写一些命令行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";

蝙蝠侠回声语句有效,所以我知道文件正在运行 - 但由于某种原因.txt它不是为了测试而编写的。 如果我访问 testcli.php它会成功写入文本.txt所以我认为我错过了一些技巧。

我怀疑您有一个 CWD 问题:test.txt 是一个相对路径,因此将在调用脚本时计算您在任何地方站立 - 这可能与您在 shell 和 Web 服务器上有所不同。尝试

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

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

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

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

我会在

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

两种可能性:

  • 当您从 Web 服务器运行 PHP 时,它始终在当前目录设置为包含脚本的目录的情况下运行。当您从命令行运行 PHP 时,工作目录将保留。检查 cwd 中的输出文件。

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

相对于OP问题。例如,如果我们有两个文件,一个是写入log.txt文件的log.php,并且都位于 C:/MAMP/htdocs .日志.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,可用于其他本地服务器