我正在制作照片上传表单。我从大约6年前从事过代码工作的人那里接替了。事实证明,通过代码阅读是一个艰难的过程。目前我正在试图找出照片上传过程的逻辑。
以下是用户提交要上传的照片时调用的代码。一切顺利,直到达到这条线:
此代码返回FALSE:
if(move_uploaded_file($file['tmp_name'],$uploadPath.'.'.$extension))
它不断返回FALSE
,因此照片永远不会上传。但是,Database
仍然会输入一个条目。
整个代码:
if($input->get('uploadcvprocess')) {
$application->setUser($user); //User who uploaded the Photo
$application->setName(trim($input->get('name')));//Title of the Photo
$application->setKeywords(trim($input->get('keywords')));//Keywords of the Photo
$application->setDate(date('Y-m-d'));//Date of the Upload
$application->setJobAd(new JobAd($input->get('jobad_id')));
$application->setDraft(0);
$application->setValidated(1);
$application->save();
$allowedExtension = array('jpg','png','gif');
$uploadPath = PHOTO_UPLOAD_PATH.'photo-'.$application->getId();
$file = $_FILES['cv'];//Get ref to uploaded file
var_dump($file);
if(!empty($file)){//If exists do this....
$extension = strtolower(substr(strrchr($file['name'], '.'), 1));
if(in_array($extension,$allowedExtension))//Check it's valid format
{
if(move_uploaded_file($file['tmp_name'],$uploadPath.'.'.$extension))//checks file is valid before uploading
{
if($oldextension = $application->getCVExtension())
{
$file = PHOTO_UPLOAD_PATH.'photo-'.$application->getId().'.'.$oldextension;
if(is_file($file))
{
@unlink($file);
$application->setCVExtension('');
}
}
//Set the photo here...
$application->setCVExtension($extension);
var_dump($application);
die();
$application->save();
}
}
else{//Not valid so show error
$application->remove();
$_SESSION['latest_photo_query_results'] = '';
$_SESSION['latest_photo_query'] = '';
header('Location: dashboard_photos.html?showForm=true&txtMessage=You can only upload images (.gif, .jpg, .png)#form');
exit;
}
}else{ //Else it doesn't so do this....
$application->remove();
$_SESSION['latest_photo_query_results'] = '';
$_SESSION['latest_photo_query'] = '';
header('Location: dashboard_photos.html?showForm=true&txtMessage=You can only upload images (.gif, .jpg, .png)#form');
exit;
}
// Reset cache
$_SESSION['latest_photo_query_results'] = '';
$_SESSION['latest_photo_query'] = '';
//When the process is done reload the photos page
header('Location: dashboard_photos.html');
exit;
}
当我做var_dump($applicaton)
时,我得到了这个:(照片对象)
object(Photo)[15]
private 'table' => string 'photo' (length=5)
private 'name' => string 'Jack 1' (length=6)
private 'date' => string '2014-07-02' (length=10)
private 'keywords' => string '' (length=0)
private 'cvExtension' => string '' (length=0) <----------Will Hold the path to Photo
private 'draft' => int 0
当我做var_dump($file)
我得到这个:(照片上传)
array (size=5)
'name' => string 'check-sheet.png' (length=15)
'type' => string 'image/png' (length=9)
'tmp_name' => string 'C:\wamp\tmp\php48B9.tmp' (length=23)
'error' => int 0
'size' => int 1374
任何人都可以看到为什么move_uploaded_file
可能会返回FALSE
?
答案 0 :(得分:0)
从PHP手册(PHP: move_uploaded_file
- Manual):
如果filename不是有效的上传文件,则不会执行任何操作, 和move_uploaded_file()将返回FALSE。
如果filename是有效的上传文件,但某些文件无法移动 原因,不会发生任何操作,move_uploaded_file()将返回 假。此外,还会发出警告。
在这种情况下,move_uploaded_file()
认为这不是有效的上传文件,并返回FALSE
而没有其他输出。
答案 1 :(得分:0)
我在尝试设置网页上传多个pdf文件时遇到了类似的问题。
我检查文件夹权限,然后它就像魅力一样。
希望它有所帮助。
答案 2 :(得分:0)
首先,您需要找出文件尝试移动到的位置,以便在某处执行:
var_dump(PHOTO_UPLOAD_PATH);
然后检查您的本地Web服务器是否具有写入该路径的正确权限。看起来您在Windows上,因此您需要在Windows资源管理器中找到该路径,然后右键单击该文件夹并转到“属性”。应该有一个安全选项卡,您可以在其中更改权限。