2017-06-26 16 views
0

更新3aug 2017:無法分配內存,無法創建子進程:我是否需要對PHP圖像請求進行排隊?

我試過了一個簡單的測試。餘由PHP-文件具有以下內容:

<?php 
echo "<img src='http://www.hependos.fi/testgetimage.php?file=2016-11-02_1478082625_zKW3xUPF.jpg'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<br><br>"; 
echo "<img src='http://www.hependos.fi/Ikonit/test/2016-11- 02_1478082625_zKW3xUPF.jpg'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
echo "<img src='SIMILARLINKWITHANOTHERFILENAME'>"; 
?> 

和testgetimage.php-文件包含以下:

<?php 

$KuvaReferenssi = basename(urldecode($_GET["file"])); 

$fileDir = "Ikonit/test/"; 

$file = $fileDir . $KuvaReferenssi; 
$type = 'image/jpeg'; 
header('Content-Type:'.$type); 
header('Content-Length: ' . filesize($file)); 
readfile($file); 

?> 

具有固定源顯示正確每次這些圖像,但與php-file-as-source文件再次顯示不正確,平均2/5圖像顯示正確。

圖片是我能在服務器上找到的最小的圖片,單個文件的大小爲4.4kb。

PHP錯誤表示:


致命錯誤:用盡2097152個字節允許存儲器大小(試圖分配2312704個字節)線/home/hependos/public_html/testgetimage.php

cPanel的錯誤日誌狀態下同提及。

我在做什麼錯在這裏?

在此先感謝!


原帖


我有我的網絡的網頁上顯示我的圖片的麻煩。圖像被一個php腳本抓取。

頁面上的圖像具有.php文件的來源,該文件根據文件參考提取圖像。 ?website.c OM/getImage.php文件=

然後實際的圖像發送到瀏覽器的PHP文件的部分具有的內容:

if (file_exists($fileDir . $file)){ 
$contents = file_get_contents($fileDir . $file); 
echo $contents;} 

當然的了文件名和目錄從數據庫中獲取並用作變量$ file。

實際的問題是,服務器虛擬內存很容易上傳(獲取6個圖像,每個大小約200kb),導致HTTP500。

Cpanels錯誤日誌的狀態(對於每個HTTP500):

[太陽15年6月25日:31:00.131534 2017] [:錯誤] [PID 398316:TID 140190395291392](12)無法分配存儲器:[客戶端85.76.42.74:50544]無法爲/ home/username/public_html/getImage創建子進程:/ usr/sbin/suphp。php,referer:http://www.website.com/index.php

這實際上是一個問題,因爲一些圖像根本不加載(沒有特定的順序,他們決定出現或不出現)。

我試圖聯繫我的服務提供商,但他們一直在說「Myes,服務器的容量已經超過了」。

這不可能是這樣,因爲除了我和我的服務器上的其他幾乎沒有任何流量。我發送的請求非常小(基於文本的文章,然後是這些圖像)。

但事情是,我錯過了圖像獲取?我應該清理一些變量還是釋放內存以便在每次獲取後使用?

我沒有使用任何庫或任何東西,我自己寫了一切。

我很樂意回答任何進一步的問題,以便讓這件事情繼續下去,這真令人沮喪。 :(

編輯28.06 15:06 我取代了那些3線和嘗試了的ReadFile() - 函數是這樣的:

echo readfile($fileDir . $row['KuvaNimi']);

但沒有區別出6幅, 5從來沒有出現

+1

所以使用[readfile()](http://php.net/manual/en/function.readfile.php)而不是將整個文件加載到PHP內存然後回顯它! –

+1

希望你的腳本不像上面顯示的代碼段那樣原始......因爲這可能意味着你對路徑遍歷攻擊很開放。 – CBroe

+0

這不是,在這部分之前有一堆安全措施。我唯一接受的就是文件引用(通過正則表達式和其他一些東西),其他所有事情都是基於用戶當前擁有的權限在幕後完成的。 – Woadier

回答

1

經過6個月的審查,測試和努力與我的代碼,這不是我的代碼在我的服務提供商有一個棄用的選項留在Linux的LVE選項。該y沒有詳細說明,但這是導致所有這些症狀的問題。

感謝所有將你的想法付諸行動的人,它終於如願以償。 :)

相關問題