2017-08-11 60 views
0

前陣子,我寫了一個小工具函數,它INPATH和outpath中,打開兩個和副本從一個到另一個使用的fread()和fwrite()。 allow_url_fopen已啓用。PHP的fopen()函數不能得到URL,但捲曲會

嗯,我已經得到了我想要得到的內容的URL,而fopen()函數沒有得到任何數據,但如果我用捲曲做同樣的,它的工作原理。

相關網址爲:http://www.deltagroup.com/Feeds/images.php?lid=116582497&id=1

的fopen版本:

$in = @fopen($inPath, "rb"); 
$out = @fopen($outPath, "wb"); 

if(!$in || !$out) 
{ 
    echo 0; 
} 

while($chunk = fread($in, 8192)) 
{ 
    fwrite($out, $chunk, 8192); 
} 

fclose($in); 
fclose($out); 

if(file_exists($outPath)) 
{ 
    echo 1; 
} 
else 
{ 
    echo 0; 
} 

捲曲版本:

$opt = "curl -o " . $outPath . " " . $inPath; 
$res = `$opt`; 

if(file_exists($outPath)) 
{ 
    echo 1; 
} 
else 
{ 
    echo 0; 
} 

任何想法,爲什麼會發生這種情況?

即使使用PHP的捲曲
+1

不要使用FOPEN的網址,這是一個小馬車。您可以使用PHP內置的[捲曲功能(http://php.net/manual/en/book.curl.php) – aynber

+4

是'allow_url_fopen'在php.ini中啓用? http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen –

+0

於allow_url_fopen是enbled-我可以從不同的網站就好了下載其他網址。 –

回答

0

,我無法下載文件 - 直到我加入了CURLOPT_USERAGENT字符串。響應中沒有任何內容表明它是必需的(沒有錯誤,除了HTTP 200以外)。

最終代碼:

$out = @fopen($outPath, "wb"); 

if(!$out) 
{ 
    echo 0; 
} 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $inPath); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FILE, $out); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13'); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15); 
curl_setopt($ch, CURLOPT_TIMEOUT, 18000); 
$data = curl_exec($ch); 
curl_close($ch); 
fclose($out); 

if(file_exists($outPath)) 
{ 
    echo 1; 
} 
else 
{ 
    echo 0; 
}