【发布时间】:2018-01-24 16:54:26
【问题描述】:
我正在开发一个 PHP cron 脚本来检查服务器是否启动 (Ping)。
这是我的代码:
// Remonte d'un dossier
chdir('../');
// Inclusion du header pour avoir les infos de connexion à la db, fonctions, etc ...
require_once('./includes/header.php');
// Requête pour récupérer toutes les IP à pinger (Non-exclues donc)
$sReqGetAllServers = " SELECT
*
FROM
host
WHERE
exclude_machine = :exclude_machine";
// Préparation de la requête
$oDatabase->Prepare($sReqGetAllServers);
// On bind la valeur au paramètre dans le WHERE
$oDatabase->BindValue(':exclude_machine', 'n', PDO::PARAM_STR);
// Exécution de la requête
$oDatabase->Execute();
// On associe les données dans un tableau à deux dimensions associatif
$aServers = $oDatabase->Assoc();
所以在第一行,我需要创建一个 chdir('../'); 以包含必要的文件 (header.php)。
我用 Chrome 测试了脚本,一切正常,但是当我用命令行执行脚本时,PHP 放弃了这个错误:
[14:40] root@dev.company.local / >> php -f /web/dev/company/public_html/dasPing/cron/cron.php
PHP Warning: require_once(./includes/header.php): failed to open stream: No such file or directory in /var/www/html/dev/diadeis/public_html/dasPing/cron/cron.php on line 7
Warning: require_once(./includes/header.php): failed to open stream: No such file or directory in /var/www/html/dev/diadeis/public_html/dasPing/cron/cron.php on line 7
PHP Fatal error: require_once(): Failed opening required './includes/header.php' (include_path='/usr/share/php') in /var/www/html/dev/diadeis/public_html/dasPing/cron/cron.php on line 7
Fatal error: require_once(): Failed opening required './includes/header.php' (include_path='/usr/share/php') in /var/www/html/dev/diadeis/public_html/dasPing/cron/cron.php on line 7
我搜索了为什么 PHP 放弃了这个,但我找不到任何答案。
有人知道为什么会这样吗?
谢谢!!
【问题讨论】:
-
chdir 是工作的,但是因为你从
/目录执行脚本,它会chdir 到/../,/是什么,像这样执行你的脚本:cd /web/dev/company/public_html/dasPing/cron/; php -f cron.php跨度> -
尝试
chdir(__DIR__.'/../');- 从脚本目录开始。 -
噢噢噢好!我现在知道了。我将尝试将这部分自动化到
cd好文件夹。谢谢! -
.. 或者只是修改 'require' 参数,使用
dirname(__FILE__)作为前缀。 -
差异源于所使用的 PHP 二进制文件。较新的 PHP-CLI 安装暗示
-C,而较旧的 PHP-CGI 类似版本切换到脚本的 basedir。
标签: php shell command-line chdir