2012-07-15 90 views
0

我正在使用下面的代碼來上傳我的網站在PHP中的文件。我會先發布代碼,然後問我的問題。PHP:在上傳過程中文件被重命名,如果有空格

upload.php的:

<html> 
<form action="upload_process.php" method="post" enctype="multipart/form-data"> 
<label for="file">Select picture to upload:</label> 
<input type="file" name="image" id="image" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 
</html> 

upload_process.php

<?php 
function error ($error, $location, $seconds = 1) 
{ 
    header ("Refresh: $seconds; URL = \"$location\""); 
    echo $error; 
    exit; 
} 
$max_file_size = 1000000; 
$current_directory = str_replace(basename($_SERVER['PHP_SELF']) , '' , $_SERVER['PHP_SELF']); 
$uploaded_directory = $_SERVER ['DOCUMENT_ROOT'] . $current_directory . 'files/'; 
$upload_form = 'http://' . $_SERVER['HTTP_HOST'] . $current_directory . 'upload.php'; 
$upload_success = 'http://' . $_SERVER['HTTP_HOST'] . $current_directory . 'view_posters.php'; 
$fieldname = 'image'; 
$errors = array (1 => "Max file size exceeded", 2 => "Max file size exceeded", 3 => "Upload incomplete", 4 => "No file attached"); 
isset ($_POST['submit']) or error ("Redirecting to upload form", $upload_form); 
($_FILES[$fieldname]['error'] == 0) or error ($errors[$_FILES[$fieldname]['error']], $upload_form); 
@is_uploaded_file($_FILES[$fieldname]['tmp_name']) or error ("Not an HTTP upload", $upload_form); 
@getimagesize($_FILES[$fieldname]['tmp_name']) or error ("Please upload only images", $upload_form); 
if (file_exists($upload_filename = $uploaded_directory . $_FILES[$fieldname]['name'])) 
{ 
    error ("File exists", $upload_form); 
} 
$uploadedfile = $_FILES[$fieldname]['tmp_name']; 
$src = imagecreatefromjpeg($uploadedfile); 
list($width,$height)=getimagesize($uploadedfile); 
$newwidth = 500; 
$newheight = 500; 
$tmp=imagecreatetruecolor ($newwidth, $newheight); 
imagecopyresampled ($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); 
imagejpeg ($tmp, "files/" . $_FILES[$fieldname]['name'], 100); 
imagedestroy($src); 
imagedestroy($tmp); 
header ("Location: " . $upload_success); 
?> 

現在,對於我的問題,如果文件名沒有一個空間,它就會調整和正確上傳。但是,如果有空間,會發生奇怪的事情。例如,如果上傳後該文件的名稱是「this image.jpg」,則它會被重新調整大小並以「this.jpg image.jpg」的形式保存到服務器中。你能告訴我爲什麼會發生這種情況嗎?

而且,$ upload_success是一個登錄頁面,它只是表示「上傳成功」。

+0

我試過你的代碼在本地,它工作正常! – Dale 2012-07-15 09:01:08

+0

您是否嘗試過使用具有空格的圖像?該文件被上傳,但在上傳後看看文件名 – pratnala 2012-07-15 09:04:49

+0

是的,我增加了一個文件名的空間,它仍然爲我工作對不起菲拉 – Dale 2012-07-15 09:08:39

回答

3

大概你不希望文件用空格保存。所以你應該檢查和糾正這是上傳驗證的一部分。

imagejpeg($tmp, "files/".str_replace(' ', '_', $_FILES[$fieldname]['name']), 100) 

這將替換帶下劃線的空格。

+0

現在它變成this.jpg_image.jpg它仍然是一個問題:( – pratnala 2012-07-15 09:12:41

+0

嗯。$ _FILES ['$ fieldname] ['name']'的值是什麼?? – Utkanos 2012-07-15 09:15:16

+0

它顯示了這個.jpg image.jpg 所以問題出在這裏,爲什麼它會像這樣轉換? – pratnala 2012-07-15 09:17:58