2016-06-14 29 views
0

我有一個基本的PHP文件上傳腳本,直到最近一直工作得很好。上傳腳本未做任何更改。通過測試/故障排除,我注意到,如果jpeg圖像方向處於橫向(寬度大於高度),並且文件大於4.5MB,則下載鎖定大約爲上傳文件的7%。如果我將圖像旋轉到縱向並保持文件大小相同,或者如果我縮小圖像大小並將其保持橫向,則上傳將完成。PHP的圖像上傳不能在橫向工作

我難過的是,縱向放大的文件會上傳得很好,上傳文件到服務器時圖像方向是否重要?

首先我使用Javascript和AJAX來設置上傳,然後調用一個PHP腳本。的JavaScript/AJAX是:

function uploadFile() 
    { 
    var formdata = new FormData(); 
    var location=document.getElementsByName("file"); 
    var file = location[0].files[0]; 
    formdata.append("file", file,location[0].id+"_"+date+"."+file.type.substring(file.type.indexOf("/")+1)); 
    var ajax = new XMLHttpRequest(); 
    _("progressBar").style.visibility="visible"; 
    ajax.upload.addEventListener("progress", progressHandler, false); 
    ajax.addEventListener("load", completeHandler, false); 
    ajax.addEventListener("error", errorHandler, false); 
    ajax.addEventListener("abort", abortHandler, false); 
    ajax.open("POST", "as_built_replace_uploader.php"); 
    ajax.send(formdata); 
    } 

我對上傳PHP是:

$filename = $_FILES["file"]["name"]; 
    $file_tmp_loc = $_FILES["file"]["tmp_name"]; // File in the PHP tmp folder 
    $file_type = $_FILES["file"]["type"]; // The type of file it is 
    $file_size = $_FILES["file"]["size"]; // File size in bytes 
    $file_error_msg = $_FILES["file"]["error"]; // 0 for false... and 1 for true 

    $wildcard="maps/".substr($filename,0,strpos($filename,"."))."*"; 
    foreach (glob($wildcard) as $path) 
     { 
     unlink($path); 
     } 
    if(move_uploaded_file($file_tmp_loc,"maps/".$filename)) 
+0

請將php文件上傳腳本代碼添加到您的問題 –

+0

考慮到PHP在上傳過程中甚至沒有讀取文件,我會在其他地方搜索該問題。也許你有一個客戶端庫來操縱圖片或是一個非常挑剔的安全軟件。 (我也注意到你讀了'$ _FILES [「file」] [「error」]'但似乎並沒有使用它 - 它甚至不是0或1,正如評論所說。) –

+0

我正在使用$ _FILES [「文件」] [「錯誤」]在開始時進行故障排除,但目前不是。那麼你是否說在我的PHP腳本開始之前AJAX事務期間發生了掛斷? – Ingo

回答

0

正如@ÁlvaroGonzález觀察,PHP 本身甚至不讀,而上傳文件;它甚至不知道它是JPEG,更不用說它的寬高比了。

因此有人必須在上傳文件時做某些事情。可能我們正在研究一些針對某些JPEG漏洞的過於聰明的防火牆規則的不利影響。嘗試上傳相同的文件,並在其後面添加一小段垃圾。它會停止成爲JPEG,但大多數IDS仍然會「看到」它裏面的任何內容,並作出反應。如果上傳仍然阻止,即使該文件不再是一個圖像,我相信這將是防火牆/ IDS干擾的強有力論據。

與管理上傳服務器的人交談也可能有助於解決問題。

但之前這樣做,你是絕對確定大型文件上傳正確嗎?重要的是編碼大小,而不是原始圖像大小。在您的php.ini中檢查upload_max_filesizepost_max_size