【问题标题】:PHP5: calling external functions, and logging errorsPHP5:调用外部函数,并记录错误
【发布时间】:2010-09-21 15:46:38
【问题描述】:

我对 PHP 非常陌生,并试图在我的本地站点上设置 phpBB。我有 apache2 和 php5 的股票 debian 安装。 phpBB 安装程序运行良好,连接到数据库并毫无问题地创建了所有表。但是当我试图打开登录页面时,我得到了一个 0 字节的响应。

一点点挖掘表明它从来没有通过对 mysql_pconnect() 的调用。 php 二进制文件只是退出而没有错误或消息。什么都没有。我尝试运行以下代码:

<?php
$id = @mysql_pconnect('localhost','myusername', 'mypassword', true);
print "id=".$id."\n";
?>

并且 "id=" 字符串从不打印。它什么也不做。我不知道去哪里查看发生了什么错误,或者根本不知道发生了什么。我安装的只是使用梨的“mysql”......也许我错过了其他东西?

这一定是某个地方的路径问题。 mysql 扩展很好地构建在

/usr/lib/php5/20060613+lfs/mysql.so

答案:

jishi:通知我“@”运算符禁止输出,包括错误消息(@echo off,有人吗?)

tomhaigh:扩展必须在 php.ini 文件中显式启用。在php.ini中添加“extension=mysql.so”行后,以下代码运行正常:

% cat d.php 
<?php
ini_set('display_errors', true);
error_reporting(E_ALL | E_NOTICE);
$id = mysql_pconnect('localhost','myusername', 'mypassword', true);
print "id=".$id."\n";
?>
% php -c /etc/php5/apache2/php.ini  d.php
id=Resource id #4

快乐!

【问题讨论】:

  • 你应该使用 apt-get 来安装它,那样会省去很多麻烦。如果您没有另外指定,它将在您的配置中启用它。 apt-get install php5-mysql debian 和 ubuntu 的优势之一。

标签: php mysql pear


【解决方案1】:

刚刚注意到您在 mysql_pconnect() 前面使用了一个 @。这会抑制所有错误,在这种情况下这是一个非常糟糕的主意。删除它,您可能会看到输出。

否则:

检查你的 php.ini,debian 应该在 /etc/php5/apache2/php.ini 中。

检查名为 display_errors 的行,如果您想在浏览器中输出错误,请将其设置为 true(不推荐用于生产系统,但在调试和开发期间很有用)。

为 apache 指定 log_errors 以将您的错误记录到 apache 的错误日志文件中,在 debian 中默认为(除非为 phpBB 站点指定了其他错误文件):

/var/log/apache2/error.log

【讨论】:

    【解决方案2】:

    尝试这样做:

    <?php
    ini_set('display_errors', true);
    error_reporting(E_ALL | E_NOTICE);
    $id = mysql_pconnect('localhost','myusername', 'mypassword', true);
    print "id=".$id."\n";
    ?>
    

    看看反应是什么

    编辑

    从您的评论看来,mysql 模块没有安装或启用。您可以查看您的 php.ini 文件,看看是否有类似

    的行
    extension=mysql.so
    

    如果用分号注释,请尝试将其删除并重新启动apache

    【讨论】:

    • 致命错误:在第 4 行调用 /usr/local/src/phpBB3/d.php 中未定义的函数 mysql_pconnect()
    【解决方案3】:

    删除“@”,即静音 mysql_pconnect 抛出的错误消息。

    Documentation

    【讨论】:

      【解决方案4】:

      当 PHP 找到一个它找不到的函数时,我有时会陷入“黑洞”。

      你能验证mysql扩展安装正确吗?

      您可以通过创建这样的 php 页面来做到这一点:

      <?php
      phpinfo();
      ?>
      

      将其保存在您的 webroot 中,然后访问它。它应该包含有关您的服务器当前运行的 PHP 模块的所有信息。

      【讨论】:

        【解决方案5】:

        我认为你没有为你的 PHP 安装 mysql 扩展。自 PHP5 以来,我认为它是一个 PECL 扩展。 如果你在 Windows 上工作,你的 php 目录中应该有一个 pecl.bat 或类似的东西。只需通过控制台去那里并输入

        pecl download mysql
        

        然后一切都应该按预期工作。

        【讨论】:

        • 这个命令只是将“mysql-1.0.tgz”下载到当前目录。我尝试了“pecl install mysql”并得到了跳过包“pear/mysql”,已经安装为1.0版
        猜你喜欢
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 2023-03-17
        • 2021-07-09
        • 1970-01-01
        • 2019-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多