require_once在命令行中不起作用

时间:2017-08-15 12:37:57

标签: php centos fatal-error require-once

php /home/test9/public_html/degerlendir/test-4567.php "var1=18&var2=22"

我需要在cron作业的后台运行一个页面。我在上面用命令测试了我的代码。但是我得到了这个错误:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/extensions/no-debug-non-zts-20100525/imagick.so' - /usr/lib64/extensions/no-debug-non-zts-20100525/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  require_once(../config.php): failed to open stream: No such file or directory in /home/test9/public_html/degerlendir/test-4567.php on line 2
PHP Fatal error:  require_once(): Failed opening required '../config.php' (include_path='.:/usr/lib64/php') in /home/test9/public_html/degerlendir/test-4567.php on line 2

问题是页面在父目录中不包含 config.php 。该页面正常在浏览器中工作。我尝试使用不同的require_once变体,例如 require_once($ _SERVER ['DOCUMENT_ROOT']。“/ config.php”)。我无法让它发挥作用。

3 个答案:

答案 0 :(得分:3)

Cron作业始终从您的根目录中获取所包含文件的完整路径。

/首页/测试/.../您的文件

答案 1 :(得分:3)

从命令行

没有$_SERVER['DOCUMENT_ROOT']。那个只能从http服务器(Apache)获得。

不会自动设置工作目录。如果提示当前位于/ some / path /脚本将尝试在/some/config.php中找到config.php。

使用脚本开头的__DIR__

尝试cd到当前路径

<?php chdir(__DIR__); ?>

答案 2 :(得分:1)

在您的cron作业中,您需要cd到正确的工作目录以允许您的PHP文件找到它包含的内容。我这样做是通过创建小shell脚本,并从cron运行shell脚本:

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd  ${DIR}
php test-4567.php

exit 0

这也使您能够执行一些有用的操作,例如检查脚本是否已在运行,以确保在您想要避免的情况下不要启动多个线程。< / p>

#!/bin/bash
FIND_PROC=`ps -ef |grep "php test-4567.php" | awk '{if ($8 !~ /grep/) print $2}'`
# if FIND_PROC is empty, the process has died; restart it

if [ -z "${FIND_PROC}" ]; then
        DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
        cd  ${DIR}
        php test-4567.php
fi

exit 0