php - imap_open产生500内部服务器错误& /etc/httpd/conf.d/文件夹中没有fcgid.conf文件

时间:2014-06-17 23:54:48

标签: php apache

我使用以下脚本从名为this.php

的php访问我的gmail

我已经回归IMAP is not working in PHP以及Imap error on myname@mydomain.com but working on myname@gmail.com

我已经确认将opensll和imap扩展加载到Apache中。

我已确认文件的文件权限

在apache日志中,我得到的唯一错误是

[Tue Jun 17 23:42:12 2014] [warn] [client 24.120.116.118] mod_fcgid: read data timeout in 40 seconds
[Tue Jun 17 23:42:12 2014] [error] [client 24.120.116.118] Premature end of script headers: this.php
[Tue Jun 17 23:42:12 2014] [error] [client 24.120.116.118] File does not exist: /home/cesarbi1/public_html/500.shtml

无论我得到什么500.如果我用imap_open注释掉这一行,那么页面就不会是500。

还有其他地方我可以找错吗?或者有人能告诉我我的剧本有什么问题吗?

<?php
/* connect to gmail */
$hostname = '{imap.gmail.com:993/imap/ssl}INBOX';
$username = 'username@gmail.com';
$password = 'password';

/* try to connect */
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to your email account: ' . imap_last_error());

/* grab emails */
$emails = imap_search($inbox,'UNSEEN') or die('Cannot connect to your email account: ' . imap_last_error());

/* if emails are returned, cycle through each... */
if($emails) {

    /* begin output var */
    $output = '';

    /* put the newest emails on top */
    rsort($emails);

    /* for every email... */
    foreach($emails as $email_number) {

        /* get information specific to this email */
        $overview = imap_fetch_overview($inbox,$email_number,0);
        $message = imap_fetchbody($inbox,$email_number,2);

        /* output the email header information */
        $output.= '<div class="toggler '.($overview[0]->seen ? 'read' : 'unread').'">';
        $output.= '<span class="subject">'.$overview[0]->subject.'</span> ';
        $output.= '<span class="from">'.$overview[0]->from.'</span>';
        $output.= '<span class="date">on '.$overview[0]->date.'</span>';
        $output.= '</div>';

        /* output the email body */
        $output.= '<div class="body">'.$message.'</div>';
    }

    echo $output;
} 

/* close the connection */
imap_close($inbox);
?>

已解决更新

虽然这个问题与另一个问题具有相同的性质,但另一个问题并没有为我们这些没有位于fcgid.conf文件夹中的/etc/httpd/conf.d/的人提供解决方案。我也在编辑我的标题以更具体地解决错误。

我通过在文件httpd.conf

的末尾添加来解决我的问题
Include "/etc/httpd/conf.d/cfgid.conf"

然后我在

中手动创建了该文件
/etc/httpd/conf.d/fcgid.conf

并添加了以下代码。

<IfModule mod_fcgid.c>
    FcgidIdleTimeout 3600
    FcgidProcessLifeTime 3600
    FcgidIOTimeout 3600
    FcgidBusyTimeout 3600
</IfModule>

1 个答案:

答案 0 :(得分:0)

你的错误是这样的:

[Tue Jun 17 23:42:12 2014] [warn] [client 24.120.116.118] mod_fcgid: read data timeout in 40 seconds
[Tue Jun 17 23:42:12 2014] [error] [client 24.120.116.118] Premature end of script headers: this.php
[Tue Jun 17 23:42:12 2014] [error] [client 24.120.116.118] File does not exist: /home/cesarbi1/public_html/500.shtml

我觉得错误在第一行:

mod_fcgid: read data timeout in 40 seconds

查看您的脚本,通过IMAP&amp; amp;然后在阅读电子邮件时直接输出到您的浏览器(我假设)?好吧,如果你有一个中等大小的电子邮箱,40秒就会很快被吃掉。

所以你可能需要在这里进入你的FastCGI配置;假设您使用的是Linux设置:

/etc/httpd/conf.d/fcgid.conf

并将此行编辑为:

FcgidIOTimeout 120

相当于两分钟。对于实际的Web服务器应用程序来说仍然很高,但应该努力解决这个问题。只需更改该行,重启Apache&amp;再试一次。如果你在Ubuntu上,你会像这样重新启动Apache:

sudo service apache2 restart