2012-07-15 92 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