当我测试带有此扩展名的图像文件时,我正在制作上传脚本.JPG,我不知道jpg或jpeg之间的差异,但似乎$ _FILES无法识别此文件类型。
我已经阅读了几个线程,$ _FILES在mime类型方面不可靠,所以我决定使用php的mime类型函数mime_content_type()
,php的getimagesize()
,{{1虽然pathinfo返回文件名和类型,但是我需要不存在的文件路径,所有函数都以$ _FILES ['file'] ['tmp_name']作为参数传递。 / p>
所以当我决定上传一个图像文件例如sample.JPG时出现了这个问题,我认为这些文件大部分来自相机< - 这就是我的想法但是更重要的是我可以上传.JPG,.jpg,jpeg,.png。除了.JPG,所有这些都很好。
主要问题是$ _FILES中的字段['tmp_name']在上传.JPG时没有值。
任何遇到此问题的人请分享您的解决方法或“你是怎么做的”。
答案 0 :(得分:47)
如果$_FILES[$field]['tmp_name']
为空,则表示文件尚未上传。您应该查看$_FILES[$field]['error']
以了解原因。
FWIW,据我所知,$_FILES[]
中的mime类型由浏览器提供。
更新:这里有一些用于处理所有文件上传错误的封装代码:
$message = 'Error uploading file';
switch( $_FILES['newfile']['error'] ) {
case UPLOAD_ERR_OK:
$message = false;;
break;
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$message .= ' - file too large (limit of '.get_max_upload().' bytes).';
break;
case UPLOAD_ERR_PARTIAL:
$message .= ' - file upload was not completed.';
break;
case UPLOAD_ERR_NO_FILE:
$message .= ' - zero-length file uploaded.';
break;
default:
$message .= ' - internal error #'.$_FILES['newfile']['error'];
break;
}
if( !$message ) {
if( !is_uploaded_file($_FILES['newfile']['tmp_name']) ) {
$message = 'Error uploading file - unknown error.';
} else {
// Let's see if we can move the file...
$dest .= '/'.$this_file;
if( !move_uploaded_file($_FILES['newfile']['tmp_name'], $dest) ) { // No error supporession so we can see the underlying error.
$message = 'Error uploading file - could not save upload (this will probably be a permissions problem in '.$dest.')';
} else {
$message = 'File uploaded okay.';
}
}
}
答案 1 :(得分:19)
检查您的php.ini
,特别是此设置
; Maximum allowed size for uploaded files.
; http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize
upload_max_filesize = 6M
或者在Apache Config中执行此操作:
<Directory "/var/www/vhosts/path/to/your/directory/import/">
php_value post_max_size 6M
php_value upload_max_filesize 6M
</Directory>
我还要说,如果您上传的文件大于php.ini upload_max_filesize
设置,那么PHP不会在错误日志中报告错误。例如,如果您将文件设置为2M
(我认为是默认设置),则上传6MB文件。
答案 2 :(得分:5)
发布答案,因为我的评分太低了。
请记住在php.ini中设置最大文件大小上限后重新启动服务器。我花了好几个小时在这个问题上认为这不是文件大小问题,同时我忘了重新启动。重启后一切正常。
我希望这可以帮助别人。
答案 3 :(得分:3)
我遇到了同样的问题,熟悉大多数.NET平台会让你忘记客户端html中发生的事情。
我的问题是我的表单有一个MAX_FILE_SIZE隐藏输入,其值比文件的等价字节小。
你的表格应该有这个;
<强> 强>
除此之外,您的表单标记必须包含 enctype =&#34; multipart / form-data&#34;
我觉得最大文件大小是kb,但它是以字节为单位的,这要归功于stackoverflow中的其他一些页面。
可能导致此问题的另一个原因是人们在之前的评论中提到的php.ini设置。你也应该post_max_size = 200M
到php.ini文件。
如果您在像我这样的Windows上进行开发,您可以看到在C:\ Windows \ Temp中显示错误的转储文件,称为&#34; php ** VERSION ** _ errors.log&#34;。它会有所帮助。
答案 4 :(得分:1)
我遇到了$ _FILES字段'tmp_name'没有.JPG文件扩展名值的问题,并且只需几步即可成功修复它。这些措施可能有助于将来的某些人。
答案 5 :(得分:0)
试试这个,看看会发生什么,
if (($_FILES['file']['type']) == "image/jpg" || ($_FILES['file']['type']) == "image/jpeg") {
//do uploading stuff here
}else{
echo 'File is not a valid JPG,JPEG';
}
答案 6 :(得分:0)
好像这是一个随机问题,因为在制作上传CSV文件的脚本时,某些CSV文件上传没有问题,但在其他情况下,$_FILES['file'][tmp_name]
将为空。