Bash脚本运行PHP脚本

43

我有一个php脚本,想通过bash脚本运行它,这样我就可以使用Cron每分钟运行该php脚本。

据我所知,我需要创建bash脚本来处理php脚本,然后才能使用Cron工具/定时器。

到目前为止,我被告知需要添加以下内容:

#!/pathtoscript/testphp.php

在我的PHP脚本的开头,我不确定该怎么做...

有什么建议吗?谢谢。


这个答案对我有用。 - quantme
10个回答

83
如果你已经在命令行工具中安装了PHP(尝试在终端输入php检查是否有效),那么你的shebang(#!)行应该如下所示:
#!/usr/bin/php

将这段代码放在脚本的顶部,然后使其可执行(chmod +x myscript.php),并创建一个 Cron 任务来执行该脚本(与执行 Bash 脚本的方式相同)。

您也可以使用 php myscript.php 命令来运行脚本。


33
如果你要在命令行使用 shebang,你真的应该使用 "#!/usr/bin/env php",因为它使脚本更具可移植性,因为 PHP 可能并不总是安装在 "/usr/bin/php" 中。明白吗? - Rican7
1
@Rican7: 通常是这样,但 OP 想要将此作为 cron 作业运行,这将具有较小的环境。如果 php 不在 /usr/bin/php,则 env 可能根本找不到它。多个 SO Q/A 解决了这个问题(例如 https://unix.stackexchange.com/q/29608)。 - EML

25

有时PHP文件可能被放在非标准位置,因此最好先找到它再尝试执行。

#!/usr/bin/env bash
PHP=`which php`
$PHP /path/to/php/file.php

1
/usr/bin/env php 正是这样做的(这就是使用 env 的主要目的),而且还有一个额外的优点,即您可以直接将您的 PHP 代码放在 Bash 脚本中,而不必编写另一个 'file.php' 文件。 - EML

13

之前的回复者说过…

如果您已经安装了PHP命令行工具… 您的shebang (#!) 行需要像这样:#!/usr/bin/php

虽然这是可能正确的... 只是因为您可以输入php并不一定意味着它就在那里... /usr/bin/php 是一个常见的位置... 但与任何shebang一样... 它需要适合您的env

找出您特定可执行文件在$PATH中位于哪里的快速方法,尝试 ... ➜which -a php ENTER,对我来说看起来像这样...

php is /usr/local/php5/bin/php
php is /usr/bin/php
php is /usr/local/bin/php
php is /Library/WebServer/CGI-Executables/php

第一个是我只需在命令提示符下输入php时获得的默认值... 但我可以在shebang或直接使用任何一个... 您还可以将可执行文件名称与env组合使用,通常可以看到,但我不太了解/信任那个。XOXO。


9

你只需要设置:

/usr/bin/php path_to_your_php_file

在你的crontab中。


9
我相信你正在寻找这样的东西:

我很确定你想要的是这样的:

#!/bin/sh

php /pathToScript/script.php

将这个脚本保存为你想要的名称(比如runPHP.sh),并赋予它执行权限,然后你可以随意使用它。

编辑:如果我没弄错的话,你也可以根本不使用bash脚本,而是将“php…”命令添加到crontab中。

祝你好运!


在大多数环境中,您不能简单地调用 php yourscript.php,而是必须找出正确的路径。例如,使用完整路径 /usr/bin/php myscript.php 或通过调用 which php 动态确定路径,并将结果写入稍后使用的变量中。 - Hafenkranich

4
这个bash脚本应该是这样的:
#!/bin/bash
/usr/bin/php /path/to/php/file.php

您需要php可执行文件(通常在/usr/bin中找到)和要运行的php脚本的路径。现在,您只需将此bash脚本放在crontab上即可完成!

2

快速查找特定可执行文件在$PATH中的位置,尝试使用以下命令。

更快捷的方法查找php所在位置...

whereis php

我正在运行Debian系统,执行上述命令后显示的是:
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

希望这能帮到您。

返回输出“未知whereis” - Kamlesh
1
如果默认没有安装whereis,您需要手动安装。 - Edward J Beckett
我已经在Windows系统上安装了FFmpeg,它可以通过命令行工作,但是当启用exec命令时,无法通过PHP工作。我还在安装FFmpeg后重新启动了计算机和XAMPP。顺便说一下,我也设置了FFmpeg的环境变量。如果您能帮忙解决问题,将不胜感激。非常感谢 :) - Kamlesh
你应该为那个问题创建一个单独的帖子,伙计。 - Edward J Beckett

0

创建file.php文件,第一行内容为:
file.php(#!/bin/php)
file.sh(#!/bin/bash).
检查已安装的php。在终端中运行以下命令:

which php

如果设置了,就会有一个答案:
/usr/bin/php

使用以下命令运行file.php文件:

php file.php

如果文件已经启动,那么您可以将以下命令写入file.sh文件中:
#!/bin/bash
run_php=`php file.php`
echo $run_php

注意单引号和反引号是不同的!!!


0

如果你的bash脚本仅仅是运行php脚本,那么你可以通过类似于/usr/bin/php /path/to/your/file.php的命令在cron中直接运行php脚本。


0
我在服务器上发现了php-cgi。而且它在环境路径中,所以我可以从任何地方运行它。我成功地在我的bash脚本中执行了file.php
#!/bin/bash
php-cgi ../path/file.php

当 PHP 脚本执行后,脚本返回了以下内容:

X-Powered-By: PHP/7.1.1 Content-type: text/html; charset=UTF-8

完成!

顺便提一下,通过发出命令 php-cgi -v 检查版本,以确保它能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接