为什么我的PHP文件上传代码不起作用?

为什么我的PHP文件上传代码不起作用?,php,html,forms,file,file-upload,Php,Html,Forms,File,File Upload,我试图用PHP制作一个简单的文件上传表单。这是我的密码: <?php $uploads_dir = '/uploads'; if(isset($_FILES['thefile'])){ $errors= array(); $file_name = $_FILES['thefile']['name']; $file_size =$_FILES['thefile']['size']; $file_tmp =$_FILES['th

我试图用PHP制作一个简单的文件上传表单。这是我的密码:

<?php
    $uploads_dir = '/uploads';

    if(isset($_FILES['thefile'])){
      $errors= array();
      $file_name = $_FILES['thefile']['name'];
      $file_size =$_FILES['thefile']['size'];
      $file_tmp =$_FILES['thefile']['tmp_name'];
      $file_type=$_FILES['thefile']['type'];
      $tmp_name = $_FILES['thefile']["tmp_name"];

      if($file_size > 2097152){
         $errors[]='File size must be less than 2 MB';
      }
      if(empty($errors)==true){
         move_uploaded_file($tmp_name, "$uploads_dir/$file_name");
         echo "Success";
      }
      else{
         print_r($errors);
      }
   }
?>
<!DOCTYPE html>
<html>
<head>
    <title>Simple File Upload</title>
</head>
<body>

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="thefile" />
    <input type="submit"/>
</form>

</body>
</html>
当我选择一个小图像文件并单击“提交”时,会出现以下错误:

警告:move\u upload\u file(/uploads/session\u timeout\u formatting\u bug.png):无法打开流:在第18行的C:\wamp\www\project\u fileshare\index.php中没有这样的文件或目录

警告:移动\u上传的\u文件():无法将C:\wamp\tmp\phpEFDE.tmp移动到C:\wamp\www\project\u fileshare\index.php第18行的“/uploads/session\u timeout\u formatting\u bug.png”

第18行是调用move_上传的文件()函数的行

如何修复此错误?我有一个“uploads_dir”文件夹,与index.php文件位于同一文件夹中。(参考上面的文件路径)。我做错了什么?我一定是误解了这个过程的一小部分,把我的目录放错了地方,或者我在代码中做错了什么


有人能发现我的错误并告诉我需要做什么来修复它吗?

您正在windows上工作,并且您告诉PHP一个无法访问的位置(即
/uploads
linux路径)

因为您在windows中工作,并且您的文档根目录是
C:\wamp\www\simpleupload

也就是说,您的文件的位置如下所示:

$uploads_dir = getcwd() . DIRECTORY_SEPARATOR . 'uploads';
  • C:\wamp\www\simpleupload\index.php
    (您的上传脚本)
  • C:\wamp\www\simpleupload\uploads
    (文件应该上传到哪里)
为什么不这样使用绝对路径:

$uploads_dir = getcwd() . DIRECTORY_SEPARATOR . 'uploads';
该函数将返回正在执行的PHP脚本的当前工作目录(在您的案例index.PHP中),因此
$uploads\u dir
现在看起来如下:
C:\wamp\www\simpleupload\uploads


尝试此操作。

如果上载目录与index.php位于同一位置,请删除$uploads\u dir变量中的“/”。或者在斜杠前添加一个“.”,因为现在它指的是根目录,它可能是当前工作目录之外的其他目录。说到魔鬼

此外,请检查您的目录是否可用于php编写:

还有Latheesan所说的,最好跨平台,因为我犯了与编辑中相同的错误

<?php
    function buildPath(...$segments){
        return join(DIRECTORY_SEPARATOR, $segments);
    }

    echo buildPath(__DIR__, 'uploads');
?>

我会改变

if(isset($_FILES['thefile'])){
if($_FILE['thefile']['error'] === UPLOAD_ERR_OK){
为此

if(isset($_FILES['thefile'])){
if($_FILE['thefile']['error'] === UPLOAD_ERR_OK){
因为我认为这是知道用户上传文件还是输入为空的最好方法

if (isset($_FILE["thefile"]["name"])){

尝试完整的系统路径
/var/usr/public/uploads
或相对路径
。/uploads
。另外,请确保该文件夹确实存在,并且具有写入该文件夹的适当权限。仅供参考,第一条if语句在那里没有执行任何操作,您不会以这种方式验证文件。谷歌是上传的好。。像这样的事。。。我不记得了,但我知道那一行在那里什么也没做,而且还从DIR_uuu获取根目录,这将很容易找到文件的根目录我回家后会尝试一下@JRO看看我的答案,我并不是说这会解决您的问题,但这是代码的重要一步=)