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