命令行PHP脚本未正确执行

时间:2013-08-02 11:32:08

标签: php shell

我有一个脚本,我试图在我的网络服务器上使用命令在命令行中执行:

php /path_to_file/file.php 'alert' >> /path_to_log_directory/exec.log &
显然,两条路径指向日志和php文件的位置。 php文件包含以下代码:

<?php
set_time_limit(3600);

require_once(dirname(dirname(__FILE__)).'/apps/init.php');
include (dirname(dirname(__FILE__)) . '/apps/avl_counter.php');
AvlCounter::$showReports = false;
AvlCounter::updateWholeInventory(false);

?>

现在updateWholeInventory从不在类中的init.php文件中调用函数“mysql_subquery”,它调用的函数是一个全局函数。但是,当我尝试上面的命令行PHP命令时,终端给我:

PHP Fatal error:  Call to undefined function mysql_subquery() in /path_to_file/avl_counter.php on line 521

该文件在我的本地环境中工作正常,这是运行apache的MAMP,但是webserver正在运行nginx和旧版本的PHP。任何人都可以帮助解决为什么这个文件在我的本地设置上运行良好但不在我的网络服务器上执行?

以下是init.php的缩减版本:

<?

date_default_timezone_set('America/Chicago');
require(dirname(__FILE__) . '/config.php');
if (DEBUG) {
    ini_set('display_errors', true);
    error_reporting(E_ALL ^ E_NOTICE);
} else {
    error_reporting(0);
}
ob_start();
...
function mysql_subquery( $file=false,$line=false,$query=false) { 
    global $queryLog;
    if (empty($queryLog))
        $queryLog = array();
    $start = microtime(true);
    // ...
} 

更新

我也遇到了这样的问题:当在shell中执行PHP文件时,init.php的代码几乎以shell中的文本形式返回,而不是作为PHP脚本处理。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

  

我也遇到了这样的问题:当在shell中执行PHP文件时,init.php的代码几乎以shell中的文本形式返回,而不是作为PHP脚本处理。

这听起来好像没有启用short tags

通过CLI运行时,PHP可以使用不同于Apache的PHP.ini。运行php -i以确定它正在使用的配置文件,然后编辑相应的配置文件以启用短标签。

答案 1 :(得分:0)

使用此

 mysql_query()

而不是

 mysql_subquery()
  • 你应该使用PDO或mysqli而不是mysql。 mysql已被弃用

答案 2 :(得分:0)

您已将PHP配置为隐藏通知或所有错误消息,具体取决于名为DEBUG的常量。请比较:

<?php

error_reporting(E_ALL ^ E_NOTICE);
$foo1++;


error_reporting(0);
$foo2++;


error_reporting(E_ALL);
$foo3++;

Fiddle

解决这个问题,你就会知道发生了什么。

修改

  

我也遇到了PHP文件执行时的问题   shell,init.php的代码几乎以文本形式返回   shell而不是作为PHP脚本处理。有什么想法吗?

最有可能的是,您尚未启用short_open_tag。当然,这完全解释了致命错误:如果您定义函数mysql_subquery()的代码没有运行,则无法使用它:)

奇怪的是,您应该已经看到了源代码涌入您的终端。我猜输出缓冲是掩盖它。