Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过bash从服务器调用php脚本?_Php_Bash - Fatal编程技术网

如何通过bash从服务器调用php脚本?

如何通过bash从服务器调用php脚本?,php,bash,Php,Bash,我想每天执行一个php脚本。我有一个包含以下行的bash脚本。我是用那个剧本写的。但通过这种方式,它可以在另一台计算机上执行。假设webservername=“slmnbr”任何主体都可以使用 xhttp://slmnbr/myscript.php. 我想从服务器上调用它 BASE_URL=http://`get-webservername` /usr/bin/wget --no-check-certificate --timeout=0 -O - "$BASE_URL/myscript.php

我想每天执行一个php脚本。我有一个包含以下行的bash脚本。我是用那个剧本写的。但通过这种方式,它可以在另一台计算机上执行。假设webservername=“slmnbr”任何主体都可以使用

xhttp://slmnbr/myscript.php.

我想从服务器上调用它

BASE_URL=http://`get-webservername`
/usr/bin/wget --no-check-certificate --timeout=0 -O - "$BASE_URL/myscript.php"
提前感谢您每天使用执行任务(或php脚本)

该链接包含您需要的所有信息,包括如何防止外部访问。

要执行任务(或php脚本),请每天使用


该链接包含您需要的所有信息,包括如何防止外部访问。

对于任何最新版本的“php”,您都应该获得一个名为: “
php.exe

就这样执行吧:

/usr/local/php.exe your_script.php

对于任何最新版本的“php”,您都应该得到一个独立的可执行文件,名为: “
php.exe

就这样执行吧:

/usr/local/php.exe your_script.php
您需要使用PHPCLI(命令行界面)来执行此操作。它通常与PHP安装包(或单独的包)一起提供

因此,正如@James所提到的,您需要在脚本名称之前加上CLI PHP可执行文件,在windows中,它是安装目录中的
PHP.exe

在UN*X系统中,它位于
/usr/bin
/usr/local/bin
/opt/local/bin
的某个位置。如果它在路径中,您可以这样简单地执行它:

php your_script.php
但请记住,从服务器运行脚本与从Web服务器运行脚本不同。例如,您将没有
POST
GET
变量。因此,您的脚本可能无法工作

更新

您可以通过使http守护进程运行PHP脚本的用户(通常是
www-data
)无法读取cron-ran脚本,从而使Web服务器无法访问cron-ran脚本

我建议只让从cron运行它的用户可读:

chown cronuser your_script.php
chmod 0400 your_script.php
更新2

如果在cron中使用与Web服务器相同的用户运行脚本,则在脚本顶部停止执行:

if (!(php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR']))) {
  header('HTTP/1.1 403 Forbidden');
  exit;
}
您需要使用PHPCLI(命令行界面)来执行此操作。它通常与PHP安装包(或单独的包)一起提供

因此,正如@James所提到的,您需要在脚本名称之前加上CLI PHP可执行文件,在windows中,它是安装目录中的
PHP.exe

在UN*X系统中,它位于
/usr/bin
/usr/local/bin
/opt/local/bin
的某个位置。如果它在路径中,您可以这样简单地执行它:

php your_script.php
但请记住,从服务器运行脚本与从Web服务器运行脚本不同。例如,您将没有
POST
GET
变量。因此,您的脚本可能无法工作

更新

您可以通过使http守护进程运行PHP脚本的用户(通常是
www-data
)无法读取cron-ran脚本,从而使Web服务器无法访问cron-ran脚本

我建议只让从cron运行它的用户可读:

chown cronuser your_script.php
chmod 0400 your_script.php
更新2

如果在cron中使用与Web服务器相同的用户运行脚本,则在脚本顶部停止执行:

if (!(php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR']))) {
  header('HTTP/1.1 403 Forbidden');
  exit;
}

您应该注意,在CLI中运行的脚本与在apache中运行的脚本不同,因为CLI和apache之间的环境不同。您应该注意,在CLI中运行的脚本与在apache中运行的脚本不同,因为CLI和apache之间的环境不同。最好在示例中包含答案所需的所有信息tutsplus不会比stackoverflow更长寿。不强迫任何人离开网站获取问题或答案的要点也更友好。谢谢Chris,当然,我使用的是cron,我想学习的是如何防止像你说的那样的外部访问。如果tutsplus不超过stackoverflow,最好包含回答所需的所有信息。不强迫任何人离开网站获取问题或答案的要点也更友好。谢谢Chris,当然,我使用的是cron,我想学习的是如何像你说的那样防止外部访问。在
/usr/local/
中有
php.exe
,这有点疯狂:)我只让我的Windows XAMP看看,不确定它在*NIX发行版中的位置。哦,抱歉,我不知道Windows XAMP。在
/usr/local/
中有
php.exe
,这有点疯狂:)我只知道我的Windows XAMP,不知道它在*NIX发行版中的位置。哦,抱歉,我不知道Windows XAMP。谢谢Karaszı,据我所知,我应该在bash脚本中使用/usr/bin/php myscript.php,并解决问题,但它认为这不仅仅是因为我仍然可以用xhttps://slmnbr/cron/myscript.php. cron不可访问(403禁止),但myscript.php仍然可以访问。可以是权限或任何配置使其不可接受吗?谢谢Karaszı,据我所知,我应该在我的bash脚本中使用/usr/bin/php myscript.php,并修复问题,但它认为这不仅仅是因为我仍然可以使用xhttps://slmnbr/cron/myscript.php. cron不可访问(403禁止),但myscript.php仍然可以访问。可以是权限或任何配置以使其不可接受?