2

我正在尝试编写一些命令行 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 - 所以我想我错过了一些技巧。

4

5 回答 5

6

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

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

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

于 2012-06-27T03:52:33.363 回答
2

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

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

于 2012-06-27T03:51:09.373 回答
1

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

于 2012-06-27T03:50:11.837 回答
1

两种可能:

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

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

于 2012-06-27T03:51:35.360 回答
0

相对于 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,可以在其他本地服务器上使用

于 2018-09-16T07:59:52.783 回答