2017-01-02 15 views
0

リモートWebサイトからオーディオファイルを取得するためのPHPスクリプトを作成しています。私はリモートでアクセスされたページをこすりするsimple html DOM scriptを使用しています動的に生成されたURLでcurl_init()を使用できない

<?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>'; 
?> 

次のようにスクリプトがあります。テスト目的のために、私は2つの異なる変数に割り当てられたURLいます

  • $ audiolink:この1つは掻き取りされているページをオフに動的を生成されています。
  • $ testval:この変数は、サンプルURLが手動で割り当てられた非動的変数です。

エコー()コマンドの出力に明らかなように、私は戻るにいずれかの変数の正確な同じ値を使用していたテストケース。ただし、$ testval(ハードコードされた値)をcurl_init()関数に渡した場合にのみ、ターゲットファイルがダウンロードされます。 $ audiolink(動的に生成される値)を渡すと、スクリプトはエラーなく実行されますが、ファイルのダウンロードに失敗します。テスト実行中のいずれかの変数の値は、繰り返しますが、同一です。

私は見落としていることはありますか?上記の通り、スクリプトは渡されたときにエラーを投げていません$ audiolink; error.logファイルが空です。

更新:だけエコー()は、「ステータスコードを編と私は$ testValというを使用する場合、私は$ audiolinkを使用し、200とき、それは400ですが判明しました。

+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

関連する問題