2015-05-19 49 views
-2

如果我使用PHP文件作爲源圖像,其中:IMG PHP的src異步

$file = $_GET["file"]; 
$file_get = get_file_contents("from/".$file); 
$fopen = fopen("to/".$file,"w+"); 
fwrite($fopen, $file_get); 
fclose($fopen); 
header("Location:to/".$file); 

而且如果我在一個頁面上使用的那種很多圖片,如:

<img src="image.php/?file=img.jpg> 
<img src="image.php/?file=img2.jpg> 
<img src="image.php/?file=img3.jpg> 
... 

我發現image.php中的代碼不會異步運行。圖像被逐一下載。我怎樣才能避免它?

+0

會話只能由一個請求中同時被打開,所有其他請求將坐下來等待。儘快關閉會話以允許其他請求並行處理。 – Sammitch

+0

你想達到什麼目的? – Xatenev

+0

它也可能是內存使用瓶頸...... get_file_contents可能會將整個映像讀入內存。也許做一個[複製](http://php.net/manual/en/function.copy.php)會更合適 – Orangepill

回答

0

我看到你的代碼有一些問題。首先,當您直接在您的代碼中使用$_GET輸入來獲取圖像時,您的整體安全性很高。

下一個是爲什麼你從一個文件中獲取內容並將它們寫入另一個文件以重定向到它們?如果您每次將文件寫入其他位置,這都不是很快。

如果您收到內容echt迴應內容並設置正確的標題以顯示圖像。

header('Content-type:image/png'); 
readfile($fullpath); 

它更容易,你有更少的IO顯示文件。否則,你可以使用像PHPThumb這樣的腳本生成較小的版本並緩存文件。

http://phpthumb.sourceforge.net/

+0

直接$ _GET輸入只是爲了簡化這個例子。在真實的項目中有很多驗證。複製或讀取文件都很好,但是如果我需要通過curl獲取請求從私有云中獲取文件,那麼文件的內容就是響應。 –