我搜索了類似的請求/問題,但似乎沒有任何符合我的情況。使用PHP讀取文件的零星碎片圖像
我使用PHP文件將上傳的文件發送/輸出到瀏覽器。我將PHP文件稱爲「閱讀器」文件。以下是讀者的歸結版本(爲了簡明,刪除其它文件類型):
<?php
if($_GET['upload']){ // for files uploaded via CMS uploader
$file = $site_directory . $uploads_path . $_GET['upload'];
}
if (file_exists($file)) {
header('Content-Description: File Transfer');
// JPG
if(strstr($file,".jpg"))
{
header('Content-type: image/jpeg');
header('Content-Disposition: inline; filename='.basename($file));
// OTHER FILE TYPES
}else
{
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
}
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}else{
echo "<p>That file does not exist.</p>";
}
?>
正如您將在下面的例子中看到,一般的作品。但是,當瀏覽器必須以這種方式加載多張圖片時,有些圖片不會加載/顯示爲已損壞。你可以在這裏看到它的一個例子:http://www.technotarek.com/index.php?id=25&view=grid。如果您一開始沒有在照片網格中看到任何損壞的圖像,請嘗試幾次硬刷新。
任何想法爲什麼這是不可靠的多個文件/圖像?
請注意,我有一個額外的腳本來重新調整示例中的圖像大小,但這不是罪魁禍首。我刪除它,問題依然存在。
更多背景(爲什麼我使用這種方法):我最初開始在服務器管理員不允許上傳到網絡服務器的網站上使用讀者腳本/文件,而是要求存儲所有用戶上傳內容在一個單獨的沙地服務器上。 「reader」文件允許我訪問和輸出這些文件,因爲sandlot文件的直接URL是不可能的。
如果您並行加載多個映像,那麼可能會用完允許的進程或內存(無論如何共享主機)。但這很難說明確。嘗試從命令行運行併發curl請求以進行調試。 – mario
是的,這是坐在共享主機平臺上。可能你知道幫助管理腳本中的流程/內存嗎?和/或者,你能否提供更多關於捲曲調試建議的指導?非常感謝。 – technoTarek
請注意,您的腳本將愉快地提供服務器上的任何文件。 'HTTP://example.com/script.php上傳= ../../../../../../../../seekrit.passwords'?希望你沒有任何你想保密的東西。 –