【问题标题】:PHP script only executing from command line when command is run from script's directoryPHP 脚本仅在从脚本目录运行命令时从命令行执行
【发布时间】:2024-09-30 12:35:01
【问题描述】:

我正在尝试从命令行运行此脚本:

#!/usr/local/bin/php
<?php
$myfile = fopen("cc.log", "a") or die("Unable to open file!");
$txt = "Success \n";
fwrite($myfile, $txt);
fclose($myfile); 
?>

它有效,但只有当我 cd 进入脚本目录并运行时:

/usr/local/bin/php test_script.php

这也有效:

/usr/local/bin/php /home/<username>/public_html/test_script.php

但当我离开目录时不会。

【问题讨论】:

  • 你在 Linux 上吗?
  • @cosinepenguin 我正在通过 Windows 上的 PuTTy 访问 Linux 服务器
  • 您是否使 test_script.php 文件可执行? (chmod 755 test_script.php)。
  • 另外,当您尝试从目录外部运行时,您是否遇到任何错误,或者它没有返回任何内容?
  • @cosinepenguin 我刚刚输入了该命令,但没有运气。并且没有错误,它什么也不返回

标签: php shell unix command-line cron


【解决方案1】:

通过将test_script.php 的第 3 行更改为:

$myfile = fopen("cc.log", "a") or die("Unable to open file!");

到绝对路径:

$myfile = fopen("/home/<username>/public_html/cc.log", "a") or die("Unable to open file!");

原始脚本在调用命令的目录中创建了一个cc.log 文件,并附加了大约 50 条“成功”消息 xD

【讨论】:

    【解决方案2】:

    对原始问题的更正式答案:

    您的文件 (test_script.php) 需要成为可执行文件才能在任何地方运行。这可以通过 chmod 来完成:

    chmod 755 test_script.php
    

    并导致文件能够通过调用来运行。

    ./test_script.php
    

    现在,请打鼓,您应该能够通过像这样调用它来运行该文件:

    ./path/to/test_script.php
    

    路径前面的那个点应该允许您将脚本作为可执行文件运行,而无需执行任何其他操作。

    希望它有所帮助/有效!

    (如果它不起作用,请发表评论,我将启动我的 Linux 机器并尝试复制它!)

    编辑

    好的,奇怪的是它不起作用!射击!您的 Linux 服务器上是否安装了 PHP CLI(命令行界面)?如果是这样,我鼓励您尝试:

    php /path/to/your/test_script.php
    

    希望第二个建议有所帮助!

    编辑 2

    啊哈时刻 2 号!!

    我相信你的 php 应该安装在这里:/usr/bin/php,将它放在本地文件夹中将不允许你从另一个目录正确调用它!

    要自己下载一个新安装的 php,运行

    sudo apt-get install php5 libapache2-mod-php5

    您还必须将脚本标题更改为#!/usr/bin/php

    这是第三次编辑的good source!我真的希望它有所帮助!

    【讨论】:

    • 谢谢,但还是没有运气。 ./test_script.php 有效,但是当我在目录中向上导航一级时,./path/test_script.php 无效。但它应该!我看到它在教程等中使用,但我没有运气!即使是绝对路径也只能在文件夹内(在本例中为 public_html 文件夹)
    • 我的第二个建议是使用 php CLI!这可能会有所帮助,我编辑了我的答案......这是我使用 CLI 的想法:*.com/questions/34396443/…
    • 回应您的编辑:仍然没有!它似乎已安装。我输入which php-cli 并得到/usr/bin/php-cliphp-cli -v 返回:PHP 5.4.45 (cli) ...
    • 啊哈!你的 php 本身在哪里?我认为它也应该在 /usr/bin/ 中(/usr/bin/php 而不是 /usr/bin/local/php)!
    • 解决了!看我的回答