2014-08-27 77 views
0

我最近出现问题时,我试图将保存图片更改为具有不同名称的位置。例如。保存一个名为hello.jpg到一个位置叫/sets/1/09092014-1.jpgPhp多张照片上传和重命名

下面的图片是我的代码:

if(isset($_FILES['files'])){ 
$errors= array(); 
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
$file_name = $key.$_FILES['files']['name'][$key]; 
$file_size =$_FILES['files']['size'][$key]; 
$file_tmp =$_FILES['files']['tmp_name'][$key]; 
$file_type=$_FILES['files']['type'][$key]; 
$today = date("dmY"); 
$Title = $today."-".$x.".jpg"; 
$x ++; 
$url = "/Sets/".$desired_dir."/".$Title; 

$query = "INSERT INTO photo(name, url, album) VALUES('$Title', '$url', '$set')"; 
$result = mysql_query($query) OR DIE(mysql_error()); 


if($file_size > 10485760){ 
$errors[]='File size must be less than 2 MB'; 
} 
if(empty($errors)==true){ 
if(is_dir("Sets/"."$desired_dir")==false){ 
mkdir("Sets/"."$desired_dir", 0700); 
} 
if(is_dir("Sets/"."$desired_dir/".$Title)==false){ 
rename ($file_tmp , $Title); 
move_uploaded_file($file_tmp, "/Sets/$desired_dir/$file_tmp"); 
}else{ 
} 

不包括在上面的DB的东西。

我花了一段时间对此,发现我可能需要使用rename()方法重命名文件,然后再保存它,我试过了,但是它再次没有奏效。

运行时,它将信息添加到数据库,创建要放入的文件夹(如果不存在),但不添加文件。

感谢, WAQ

+1

你有一个'Sets'目录在你的服务器的文件系统的根?请记住,PHP在文件系统级别运行,并且完全不了解您的站点结构。如果'/ Sets'实际上是一个Web路径,那么你可能需要更多的东西像'$ _SERVER [“DOCUMENT_ROOT”]。 '/ Sets/etc ...''而不是你的move_uploaded_file()调用。 – 2014-08-27 21:25:51

+0

感谢您的回复,The/Sets文件是我工作的php文件。我认为它正在工作,因为如果/ Sets/1 /不存在,它将在/ Sets /中创建“1”文件夹。 move_uploaded_file()是不同的? – Waq 2014-08-27 21:30:10

+0

所以你有'example.com/Sets/blahblahblah'?然后,这是一个基于Web的路径,它存在于服务器文件系统的某个地方,可能是'/ home/sites/example.com/html/Sets'或其他。您需要整个路径,因为PHP不会知道您正在尝试继续使用您网站的文档根目录。 PHP不关心你的网站的文档根目录是什么。 – 2014-08-27 21:32:01

回答

1

根据你的解释,你不应该需要在所有使用$ _ SERVER [“DOCUMENTE_ROOT”。你只需要注意文件结构和你的代码。这里是更正代码与评论:

if(empty($errors)==true){ 
// $desired_dir didn't need parenthesis, buts its ok to use them 
// Remember directories and file names are case sensitive: Sets is != to sets 
if(is_dir("Sets/".$desired_dir)==false){ 
// If your server is picky you can try 0755 here and change it lower later 
mkdir("Sets/".$desired_dir, 0700); 
} 
// ERROR your if test is supplying a file but you were testing for directory 
// $Title is a file not a directory 
if(is_file("Sets/".$desired_dir."/".$Title)==false){ 
rename ($file_tmp,$Title); 
// You just renamed $file_tmp so change the blow code to use the right file 
// Because of the rename $file_tmp no longer exists 
move_uploaded_file($Title,"Sets/$desired_dir/$Title"); 
}else{ 
// It already exists, handle it 
} 
+0

感谢您的回复。由于某些原因,它仍然只在/ Backend文件夹中创建文件,而不是/ Backend/Sets/1。感谢评论,真的帮助我完成了它。我认为重命名函数会改变$ file_tmp的内容,而不仅仅是重命名它。 – Waq 2014-08-27 23:01:51

+0

Ya rename()是一个函数,它使用您为其执行任务的变量。所以当你使用它的时候,技术上$ file_tmp依然存在,问题是它保存了一个在服务器上不存在的值(旧的文件名)。只是不得不澄清。哦...我看到错误,我认为它在move_uploaded_file()我有一个斜线在集前,不应该在那里。修复了代码。 – Blizzardengle 2014-08-29 04:39:44

+0

是的,我最终删除了这个斜线后玩你的原始答案!非常感谢您的帮助,现在效果很好。 – Waq 2014-08-29 14:56:52