我正在编写一个PHP脚本来检索远程网站上的音频文件。脚本如下:
<?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分配给两个不同的变量:
我正在使用的测试用例为 echo()命令的输出中显示的任一变量返回完全相同的值。但是,仅当我将 $ testval (硬编码值)传递给 curl_init()函数时才会下载目标文件。如果我传递 $ audiolink (动态生成的值),脚本运行时没有任何错误但无法下载文件。我重复测试运行中的任一变量中的值都是相同的。
我有什么可以忽略的吗?如上所述,脚本在传递 $ audiolink 时不会抛出任何错误; error.log 文件为空。
更新:只需 echo()了解状态代码,当我使用 $ audiolink <时,结果为400 / strong>和200,当我使用 $ testval 时。
答案 0 :(得分:2)
也许是编码问题:
http://audio1.spanishdict.com/audio?lang=es&text=hombre&key=84be08a91b32dc61e45f8f78970b206b
VS
http://audio1.spanishdict.com/audio?lang=es&text=hombre&key=84be08a91b32dc61e45f8f78970b206b
尝试编码&amp;和?正确的,也许htmlspecialchars_decode会有所帮助