Php 移动\u上载的\u文件失败
有人能帮我理解为什么这是假的吗Php 移动\u上载的\u文件失败,php,image,Php,Image,有人能帮我理解为什么这是假的吗 if ((move_uploaded_file($_FILES[$field]['tmp_name'], $path))) { 例如,潜在的原因。我已经检查了变量是否正确,并检查了目标文件夹777的权限 干杯 对于那些想要查看var_dump($_文件)的用户 使用move\u upload\u file您不需要777权限。$path的输出是什么?您是否已验证$path是否存在?您是否已验证$field是否存在 我猜$field或$path不存在,或者open_
if ((move_uploaded_file($_FILES[$field]['tmp_name'], $path))) {
例如,潜在的原因。我已经检查了变量是否正确,并检查了目标文件夹777的权限
干杯
对于那些想要查看var_dump($_文件)的用户
使用
move\u upload\u file
您不需要777权限。$path
的输出是什么?您是否已验证$path
是否存在?您是否已验证$field
是否存在
我猜$field或$path不存在,或者open_basedir有效
是否启用了open\u basedir
限制?这可能会阻止上载文件的目标被写入。在php.ini中查找open_basedir
,如果指定了一个路径,那么它将被启用,并且您希望查看上载文件的目标路径是否在此路径内。如果是,那就是它失败的原因
更新
$path不能是URL,它必须是本地路径,例如/home/user/public\u html/
基本调试步骤:
看起来像什么李>打印($\u文件)
- 源文件实际存在吗李>
- 文件上传的“错误”标志为零(打印时可见)
- 目标
看起来像什么李>$path
- 是否在目标路径中指定完整文件名
$path
只是文件夹的路径,而不是完整文件名的路径
更新:您需要将文件系统路径指定为$path
您是否检查了临时上载文件夹的权限 如果您执行以下操作,php会告诉您什么:
var_dump($_FILES);
不要使用
$path = "http://www.barbadostravelbuddy.co.uk/demo/images/carhire
/accountile10420103260403000000pm.png"
但是
它需要是系统上的路径,而不是URL
我已经检查了变量
不要检查变量,但要检查错误消息。这是你唯一需要的东西。
在代码顶部添加这些行
ini_set('display_errors',1);
error_reporting(E_ALL);
看看上面写的是什么。如果移动上传的文件失败,它将始终引发一个错误,并提供详细解释
你们不会相信的,但阅读错误信息是比你们以前尝试的猜测更有效的发现问题的方法
我不敢相信没有人已经提到了 您是否编辑了php.ini以确保upload\u tmp\u dir指向临时目录?Loïc Février,谢谢,您为我节省了很多时间 这是我的部分。。。 在上载过程中打印可能的错误 首先创建目录上传器/UploadedFiles 然后使用下面的代码
$destination=$_SERVER[DOCUMENT_ROOT]."/Uploader/UploadedFiles/" . $_FILES["file"]["name"];
if(move_uploaded_file($_FILES["file"]["tmp_name"], $destination)){
echo ("Stored in".$_SERVER[DOCUMENT_ROOT]."/Uploader/UploadedFiles/".$_FILES["file"]["name"]);
}else{
$html_body = '<h1>File upload error!</h1>';
switch ($_FILES[0]['error']) {
case 1:
$html_body .= 'The file is bigger than this PHP installation allows';
break;
case 2:
$html_body .= 'The file is bigger than this form allows';
break;
case 3:
$html_body .= 'Only part of the file was uploaded';
break;
case 4:
$html_body .= 'No file was uploaded';
break;
default:
$html_body .= 'unknown errror';
}
echo ($html_body);
}
$destination=$\u服务器[文档根]。“/Uploader/UploadedFiles/”$_文件[“文件”][“名称”];
如果(移动上传的文件($文件[“文件”][“tmp文件名”],$目的地)){
echo(“存储在“$\u服务器[文档根]。”/Uploader/UploadedFiles/”$\u文件[“文件”][“名称]);
}否则{
$html_body='文件上载错误!';
开关($\u文件[0]['error']){
案例1:
$html_body.='文件比PHP安装允许的文件大';
打破
案例2:
$html_body.='文件大于此表单允许的大小';
打破
案例3:
$html_body.='仅上载了部分文件';
打破
案例4:
$html_body.='未上载任何文件';
打破
违约:
$html_body.=“未知错误”;
}
echo($html_body);
}
$path
必须是文件名,而不是目录路径。检查:
enctype="multipart/form-data"
在表单内部,如果没有它,文件上传将根本无法工作 我也面临同样的问题 如果您的错误为“无法打开流:权限被拒绝”,则表示PHP服务器无法在目标目录中创建新文件 一旦您在目录上设置了Linux权限(听起来像是将其设置为777),您应该将该特殊权限授予PHP服务器 如果文件夹名为“uploads”,则应将cd刻录到上一个目录并使用下一个命令:
chcon -R -t httpd_sys_rw_content_t uploads
这彻底解决了我的问题
希望有帮助。我的第一个想法是询问$field是否设置正确,即是否指定了正确的路径名。然后,我会对$path提出同样的要求。尝试使用var_转储它们中的每一个。对于安装了Avast的用户,可以检查以下答案:对我来说,这是错误的路径,100%检查您的路径是否存在于服务器上非常重要,当我将路径上载到远程服务器时,我根据本地服务器路径放置路径。我遇到此错误。$path和$field返回预期字符串。如果有帮助的话,我可以发布最新的输出。@Yoi您知道$path需要是一个文件名,而不是路径,对吗?open_basedir在phpinfo$path=最新版本中没有值所有这些都是应该的(我想您指的是绝对目标路径)@YsoL8
$path
需要是一个还不存在的完整文件名,不仅仅是目录的路径。$path=最近我尝试了/public\u html/demo/images/carhire,但没有成功。我的目录结构是root>public\uhtml>demo>images>carhireOk。尝试在该目录中执行mkdir()。这将检查目录是否正确,以及您是否对其拥有权限。然后您可能没有权限,或者您的路径不正确。你能做一个phpinfo()并给我们提供\u服务器[“DOCUMENT\u ROOT”]
?你能给我们目录的权限吗?文档根是/home/sites/barbadostavelbuddy.co.uk/public\u html/权限是755那么你为什么告诉我们“我的目录结构是root>public\u html>demo>images>carhire”?这不是。。。答案已更新,路径正确。很高兴知道,我从来没有遇到过移动上传文件的问题,所以我从来都不需要知道。当move\u uploaded\u file()
很可能是由于目标文件夹/目录中的权限问题导致的错误/失败。是的,您可以看到带有此答案的错误消息
enctype="multipart/form-data"
chcon -R -t httpd_sys_rw_content_t uploads