【问题标题】:Premature end of script headers: php-cgi -- While running a CURL script脚本头过早结束:php-cgi -- 运行 CURL 脚本时
【发布时间】:2013-04-18 10:08:26
【问题描述】:

在我(再次)返回主机之前,他们在以下脚本中给出的唯一错误日志是:

脚本头提前结束:php-cgi

我正在运行的脚本可在其他服务器上运行,而我的本地计算机在运行,但在此 perticualr 服务器上出现错误 500:

$ch = curl_init("http://feeds.energydigger.com/headlines.xml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
$doc = new SimpleXmlElement($data, LIBXML_NOCDATA);

if(isset($doc->channel))
{
    parseRSS($doc);
}
function parseRSS($xml)
{
    $cnt = 3;
    for($i=0; $i<$cnt; $i++)
    {
        $url    = $xml->channel->item[$i]->link;
        $title  = $xml->channel->item[$i]->title;
        $desc = $xml->channel->item[$i]->description;
        $date = $xml->channel->item[$i]->pubDate;

        echo '<p><a href="'.$url.'">'.$title.'</a><br />'.$date.'</p>';
    }
}

有谁知道什么可能会产生错误,我不能说我以前见过这个...我还在尝试获取 PHP 日志。

【问题讨论】:

    标签: php curl


    【解决方案1】:

    如果异常被抛出但未被捕获,并且在 PHP 设置中display_errors = 0,您可能会收到 500 错误。很可能是由 SimpleXML 抛出的。尝试用 XML 操作将该部分包装在 try .. catch 块中,看看异常是什么。例如:

    $ch = curl_init("http://feeds.energydigger.com/headlines.xml");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $data = curl_exec($ch);
    curl_close($ch);
    
    try
    {
        $doc = new SimpleXmlElement($data, LIBXML_NOCDATA);
    
        if(isset($doc->channel))
        {
            parseRSS($doc);
        }
        function parseRSS($xml)
        {
            $cnt = 3;
            for($i=0; $i<$cnt; $i++)
            {
                $url    = $xml->channel->item[$i]->link;
                $title  = $xml->channel->item[$i]->title;
                $desc = $xml->channel->item[$i]->description;
                $date = $xml->channel->item[$i]->pubDate;
    
                echo '<p><a href="'.$url.'">'.$title.'</a><br />'.$date.'</p>';
            }
        }
    }
    catch (Exception $e)
    {
        echo $e -> getMessage();
    }
    

    以防万一,here's more about PHP exceptions

    【讨论】:

    • 啊,是的,我完全忘记了这一点,上传了上面的内容,但仍然给了我 500 页 [Thu Apr 18 14:37:31 2013] [warn] mod_fcgid: read data timeout in 60 seconds [Thu Apr 18 14:37:31 2013] [error] [client 194.168.131.146] 脚本头过早结束:php-cgi
    • 在这种情况下,读取数据超时可能意味着 URL 另一端的服务器(您从中获取提要的服务器)没有响应,或者提要 XML 可能需要太多时间解析(SimpleXML 将整个文件加载到内存中,并在实例化时将其作为一个整体进行解析。)您能否检查是否可以从有问题的服务器访问该 URL?
    • 很抱歉耽搁了时间(已经 afk 了)。所以我尝试了一个简单的获取标头并在本地和另一台服务器上返回 200 响应,在问题服务器上再次返回错误 500。我在这里迷路了。现在它不是卷曲问题我已经创建了另一个帖子,谢谢你的帮助。 stackoverflow.com/questions/16200928/…
    猜你喜欢
    • 2012-06-25
    • 2012-04-07
    • 2021-12-03
    • 2011-03-19
    • 2014-06-03
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    相关资源
    最近更新 更多