0

次のコードを使用して、リモートファイルをサーバーにアップロードしています。直接ダウンロードリンクが指定されている場合はうまく機能しますが、最近、ダウンロードリンクとしてmysqlリンクを提供しているWebサイトがほとんどないことに気付きました。そのリンクをクリックすると、ファイルがPCにダウンロードされ始めます。ただし、そのページのhtmlソースでも、直接リンクは表示されません。

これが私のコードです:

 <form method="post">
 <input name="url" size="50" />
 <input name="submit" type="submit" />
 </form>
 <?php
 if (!isset($_POST['submit'])) die();
 $destination_folder = 'mydownloads/';
 $url = $_POST['url'];
 $newfname = $destination_folder . basename($url);
 $file = fopen ($url, "rb");
 if ($file) {
 $newf = fopen ($newfname, "wb");

  if ($newf)
 while(!feof($file)) {
 fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
 }
 }

 if ($file) {
  fclose($file);
 }

if ($newf) {
fclose($newf);
}

?>

ダウンロードリンクが直接のすべてのリンクでうまく機能します。たとえば、 http://priceinindia.org/muzicpc/48.php? id = 415508リンクを指定すると、音楽ファイルがアップロードされますが、ファイル名は48になります。 php?id = 415508ですが、実際のmp3ファイルは
http://lq.mzc.in/data48-2/37202/Appy_Budday_(Videshi)-Santokh_Singh(www.Mzc.in).mp3に保存されています。

したがって、実際のリンク先URLを取得できる場合、名前はAppy_Budday_(Videshi)-Santokh_Singh(www.Mzc.in).mp3になります。

だから私は実際のダウンロードURLを取得したいと思います。

4

2 に答える 2

1

これには Curl ライブラリを使用する必要があります。http://php.net/manual/en/book.curl.php

接続を閉じる前に、curl_getinfo (http://php.net/manual/en/function.curl-getinfo.php) を呼び出して具体的に getあなたが望むものであるCURLINFO_EFFECTIVE_URL。

<?php
// Create a curl handle
$ch = curl_init('http://www.yahoo.com/');

// Execute
$fileData = curl_exec($ch);

// Check if any error occured
if(!curl_errno($ch)) {
    $effectiveURL = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
}

// Close handle
curl_close($ch);
?> 

(curl を使用してファイルに直接書き込むこともできます - CURLOPT_FILE オプションを使用します。マニュアルにもあります)

于 2012-09-19T07:19:20.700 に答える
0

問題は、元の URL がリダイレクトされていることです。リダイレクト先の URL をキャッチするには、ヘッダーを使用してから、ベース名 ($redirect_url) をファイル名として取得します。

CURLを使用するRobbieの場合は+1。

実行する場合(コマンドラインから)

[username@localhost ~]$ curl http://priceinindia.org/muzicpc/48.php?id=415508 -I
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.0.10
Date: Wed, 19 Sep 2012 07:31:18 GMT
Content-Type: text/html
Connection: keep-alive
X-Powered-By: PHP/5.3.10
Location: http://lq.mzc.in/data48-2/37202/Appy_Budday_(Videshi)-Santokh_Singh(www.Mzc.in).mp3

ここのロケーション ヘッダーが新しい URL であることがわかります。

PHPで次のようなものを試してください

$ch = curl_init('http://priceinindia.org/muzicpc/48.php?id=415508'); 
curl_setopt($ch, CURLOPT_HEADER, 1); // return header
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // dont redirect 
$c = curl_exec($ch); //execute
echo curl_getinfo($ch, CURLINFO_HTTP_CODE); // will echo http code.  302 for temp move
echo curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // url being redirected to

ヘッダーの場所の部分を見つけたいとします。設定は確かではありませんが。

編集 3..または 4? ええ、そうです、私は何が起こっているかを見ています。実際には場所の URL をたどり、ファイルをダウンロードせずに有効な URL をエコーし​​ます。試す。

$ch = curl_init('http://priceinindia.org/muzicpc/48.php?id=415508');
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$c = curl_exec($ch); //execute
echo curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); // url being redirected to

これを実行すると、出力は

[username@localhost ~]$ php test.php
http://lq.mzc.in/data48-2/37202/Appy_Budday_(Videshi)-Santokh_Singh(www.Mzc.in).mp3
于 2012-09-19T06:41:13.000 に答える