2017-01-02 36 views
0

我正在编写一个PHP脚本来检索远程网站上的音频文件。该脚本如下:无法使curl_init()与动态生成的URL一起工作

<?php 
require_once 'table_access/simplehtmldom_1_5/simple_html_dom.php'; 
function getsound($wrd){ 
    $html = file_get_html('http://www.spanishdict.com/translate/' . rawurlencode($wrd)); 
    $colentry = $html->find('div.source'); 
    if($colentry != null){ 
     $ahref = $colentry[0]->find('a.audio-start'); 
     $audiolink = trim($ahref[0]->getAttribute('href')); 

     $testval = 'http://audio1.spanishdict.com/audio?lang=es&text=hombre&key=84be08a91b32dc61e45f8f78970b206b'; 
     echo '<p> T: ' . $testval . '</p>'; 
     echo '<p> A: ' . $audiolink . '</p>'; 
     // $testval = $audiolink; 
     $ch = curl_init($audiolink); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_NOBODY, 0); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
     $output = curl_exec($ch); 
     $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
     curl_close($ch); 
     if ($status == 200) { file_put_contents(dirname(__FILE__) . '/audiotest.mp3', $output); } 
     else { echo $status; } 

     return($audiolink); 
    } 
} 

echo '<p>' . getsound('hombre') . '</p>'; 
?> 

我正在使用simple html DOM script来刮取远程访问的页面。出于测试目的,我有URL分配到两个不同的变量:

  • $ audiolink:正在动态生成关闭页面被刮掉这一个。
  • $ testval:这是一个非动态变量,手动为其分配了一个示例URL。

测试用例我使用返回的精确相同的值或者变量是在的回波()命令的输出明显。但是,仅当我将$ testval(硬编码值)传递给curl_init()函数时才会下载目标文件。如果我通过了$ audiolink(动态生成的值),脚本无任何错误地运行,但无法下载文件。我重复一次,在我的测试运行中的任何变量的值是相同的。

有什么我可以忽略的吗?如上所述,脚本在传递时不会引发任何错误$ audiolink; error.log文件为空。

更新:只是回声()“编状态码和原来这是400当我使用$ audiolink和200,当我用名为testVal $

+0

我会如果我可以。正如我在问题中所说的,脚本没有错误。 * error.log *文件是空的。 – TheLearner

+0

400是一个不好的要求,我认为$ audiolink无效。你可以发布$ audiolink的内容吗? – Sepultura

+0

$ audiolink和$ testval中的值完全相同,这就是我难倒了。唯一的区别是,当$ audiolink动态分配一个URL时,$ testval被分配一个静态值。你可以在http://www.peppyburro.com/sandboxassets/engines/pronunciation1.php查看这个代码的输出: – TheLearner

回答

2

,也许这是一个编码问题:

http://audio1.spanishdict.com/audio?lang=es&text=hombre&key=84be08a91b32dc61e45f8f78970b206b 

http://audio1.spanishdict.com/audio?lang=es&amp;text=hombre&amp;key=84be08a91b32dc61e45f8f78970b206b 

尝试编码&和?正确的,也许htmlspecialchars_decode将帮助

+0

当我把在htmlspecialchars_decode()中分配给'$ audiolink'的值包装下载:) –

+0

Perfect !有效!真是一个愚蠢的错误。万分感谢。 :) – TheLearner