Youtube Zend API 函数中断脚本


Youtube Zend Api Function Interrupts Script

这是代码:

...
require_once 'Zend/Loader.php'; // the Zend dir must be in your include_path
Zend_Loader::loadClass('Zend_Gdata_YouTube');
Zend_Loader::loadClass('Zend_Uri_Http');
$yt = new Zend_Gdata_YouTube();
$videoEntry = $yt->getVideoEntry($id_video);
....

在这个脚本的几行中,有时(我不明白为什么这种情况只发生几次,而不是在其他时候,似乎是随机的)Zend_Gdata_YouTube() 或 getVideoEntry($id_video) 不返回,脚本死亡。在脚本的文件夹中没有日志文件,所以我不明白它在运行时会发生什么。任何帮助或建议将不胜感激,谢谢。

我遇到了同样的问题,但是上传了YouTube视频。通过挖掘Zend文件,我找到了脚本死亡的地方。它是在Zend/Gdata/HttpAdapterStreamingSocket.php

while ($chunk !== FALSE) {
    if (! @fwrite($this->socket, $chunk)) {
        require_once 'Zend/Http/Client/Adapter/Exception.php';
        throw new Zend_Http_Client_Adapter_Exception(
            'Error writing request to server');
    }
    $chunk = $body->read(self::CHUNK_SIZE);
}

通过从fwrite中删除@,我得到了最大执行时间超过错误。通过禁用循环的执行时间限制,错误不会再次出现:

$executionTime = ini_get('max_execution_time');
set_time_limit(0);
while ($chunk !== FALSE) {
    if (! fwrite($this->socket, $chunk)) {
        require_once 'Zend/Http/Client/Adapter/Exception.php';
        throw new Zend_Http_Client_Adapter_Exception(
            'Error writing request to server');
    }
    $chunk = $body->read(self::CHUNK_SIZE);
}
set_time_limit($executionTime);

这可能不是您的确切问题,但请尝试在 Zend 文件中查找@fwrite调用并执行相同的操作,因为您的脚本可能在将块写入套接字时以及在抑制错误的函数上死亡。