如何通过bash从服务器调用php脚本?
我想每天执行一个php脚本。我有一个包含以下行的bash脚本。我是用那个剧本写的。但通过这种方式,它可以在另一台计算机上执行。假设webservername=“slmnbr”任何主体都可以使用 xhttp://slmnbr/myscript.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
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仍然可以访问。可以是权限或任何配置以使其不可接受?