2011-08-10 89 views
0

我想每天执行一个php脚本。我有一个包含下面几行的bash脚本。我正在用这个脚本来做。但通过这种方式,它可以从另一台计算机上执行。可以说webservername =“slmnbr”任何机构可以调用myscript与如何通过bash从服务器调用php脚本?

xhttp://slmnbr/myscript.php。

我想从服务器调用它。

BASE_URL=http://`get-webservername` 
/usr/bin/wget --no-check-certificate --timeout=0 -O - "$BASE_URL/myscript.php" 

在此先感谢

+1

您应该注意,在CLI中运行的脚本与运行时不一样在apache中,由于CLI和apache之间的环境不同 – ajreal

回答

2

你需要有PHP CLI(命令行界面)来做到这一点。它通常带有PHP安装包(或单独的包)。

所以@ @詹姆斯提到它,你需要在CLI脚本名前面加上CLI的PHP可执行文件,它在windows的php.exe的安装目录中。

在UN * X系统中,它位于/usr/bin/usr/local/bin/opt/local/bin的某处。如果是在PATH你可以简单地这样执行它:

php your_script.php 

但请记住,从服务器上运行脚本会不一样的,从网络服务器上运行。对于例如你将不会有POSTGET变量。所以你的脚本可能无法工作。

更新

您可以进行的cron通过使其无法读取由谁是HTTP守护进程(通常为www-data)运行PHP脚本的用户已运行的脚本无法访问您的网络服务器。

我建议,使其只能通过谁是从cron运行它的用户可读:

chown cronuser your_script.php 
chmod 0400 your_script.php 

UPDATE2

如果你使用相同的用户运行的脚本在cron web服务器,然后在脚本的顶部停止执行:

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

感谢Karaszı, 据我所知,我应该在我的bash脚本中使用/ usr/bin/php myscript.php,并解决问题,但它认为它比这更多,因为我仍然可以用xhttps调用它:/ /slmnbr/cron/myscript.php。 cron无法访问(403 Forbidden),但myscript.php仍然可以访问。可以是权限或任何配置,使其无法访问? – kursat

+0

@kursadyo:我更新了我的答案。 –

1

要执行的任务(或PHP脚本)每天使用cron

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

+0

在tutsplus不超过stackoverflow的情况下,最好包含答案所需的所有信息。同时也不要强迫任何人离开网站去获得问题或答案的要点。 –

+0

谢谢克里斯,当然,我使用cron,我想学的是如何防止外部访问像你说的。 – kursat

0

对于任何新版本的“PHP”你应该得到所谓独立的可执行文件: “php.exe

只需执行此像这样:

/usr/local/php.exe your_script.php 
+0

在'/ usr/local /'中有'php.exe'这有点疯狂:) –

+0

我只有我的Windows XAMP才能确定它在* NIX发行版中的位置。 –

+0

哦,对不起,我不知道Windows XAMP。 –