如何从命令行PHP写入文件?

时间:2012-06-27 03:46:13

标签: php shell command-line

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

5 个答案:

答案 0 :(得分:6)

我怀疑你有一个CWD问题:test.txt是一个相对路径,因此无论你在调用脚本时的哪个位置都会计算它 - 这可能是你在shell和web服务器上的不同之处。尝试

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

两种可能性:

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

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

答案 4 :(得分: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,可以在其他本地服务器上使用