PHP上传表单问题

Posted

技术标签:

【中文标题】PHP上传表单问题【英文标题】:PHP uploading form problems 【发布时间】:2015-01-02 04:52:44 【问题描述】:

我在使用 php 上传表单时遇到问题,我过去曾创建过这样的页面,但由于某种原因,这似乎正在发挥作用,我希望我只是错过了一些如此简单的事情。我正在尝试创建和上传表单以上传 Wav、rar、zip 和 txt 文件并在其他所有内容上返回错误。

如果我尝试上传与这些文件无关的文件,则会显示错误,但如果我尝试上传 wav 或 zip 文件,它不起作用,我不会收到任何类型的错误报告,但如果我是上传一个.txt文件,它似乎工作正常。

我的html代码是;

           <form action="<?php echo $site_url; ?>upload.php" enctype="multipart/form-data" method="post">
                <input type="hidden" name="upload" id="upload" value="upload" />
  <label for="invoice"><strong>Select Invoice Number</strong></label>

 <select name="invoice" <?php if (array_key_exists('invoice', $add_product_errors)) echo ' class="error"'; ?>>


<?php  while($row = mysqli_fetch_array($r)) ?>
<option value="<?php echo $row[0] ; ?>" 
<?php if (isset($_POST['invoice']) && ($_POST['invoice'] == $row[0]) ) echo ' selected="selected"';
        echo ">" .$row[0]. "</option>\n"; ?>
        <?php  ?>
</select><?php if (array_key_exists('invoice', $add_product_errors)) echo ' <span class="error">' .$add_product_errors['invoice']. '</span>'; ?>
<label for="track"><strong>Upload File</strong></label>

<input type="hidden" name="MAX_FILE_SIZE" value="5120000" /> 
<input type="file" name="song" id="song" <?php if (array_key_exists('song', $add_product_errors)) echo " class=\"error\" /> <span class=\"error\">" .$add_product_errors['song']. "</span>"; else    echo ' />'; if (isset($_SESSION['song']))  echo " CURRENTLY '$_SESSION['song']['file_name']'";   ?>
  <input type="submit" name="upload_files" id="upload_files" value="Upload Files" />
      </form>

还有我的 php 脚本;

如果(isset($_POST['上传'])) if(is_uploaded_file($_FILES['song']['tmp_name']) && ($_FILES['song']['error'] == UPLOAD_ERR_OK)) $file = $_FILES['歌曲']; $size = ROUND($file['size']/1024); 如果($大小> 5120000) $add_product_errors['song'] = '文件太大'; // 结束文件大小 $allowed_mime = array('audio/wav', 'audio/x-wav', 'application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip' , '文本/纯文本'); $allowed_extensions = array('.wav', '.zip', '.rar', '.txt'); $ext = substr($file['name'], -4); if((!in_array($file['type'], $allowed_mime)) || (!in_array($ext, $allowed_extensions)) ) $add_product_errors['song'] = "我们只接受 .wav 和 .zip 文件,请勿发送 .mp3 文件"; // 如果 EXT 错误则结束 if (!array_key_exists('song', $add_product_errors)) $dest = "客户/" 。 $用户名[0] 。 “/”。 $_POST['发票'] 。 “/”。 $file['name']; if(move_uploaded_file($file['tmp_name'], $dest)) // $_SESSION['image']['new_name'] = $new_name; $_SESSION['song']['file_name'] = $file['name']; $add_product['text'] = "

文件已成功移动

\n"; 别的 trigger_error('文件无法移动。'); 取消链接($file['tmp_name']); // END 如果文件被移动 // END 如果文件可以移动 elseif (!isset($_SESSION['song'])) 开关 ($_FILES['song']['error']) 情况1: 案例2: $add_product_errors['song'] = "文件太大 5GB Max"; 休息; 案例3: $add_product_errors['song'] = "文件部分上传"; 休息; 案例6: 案例7: 案例8: $add_product_errors['song'] = "由于系统错误无法上传"; 休息; 案例4: 默认: $add_product_errors['song'] = "没有上传文件"; 休息; //结束开关 如果(空($add_product_errors)) 回声“是”; $body = $username[0] 。 “已将文件上传到”。 $_POST['发票'] 。 "准备开始下载和工作"; //mail($site_email, '文件已加载',$body,'来自:' .$site_email); //$_POST = 数组(); //$files = 数组(); 未设置($file,$_SESSION['song']); //END IF $_POST 上传

任何帮助将不胜感激,谢谢

【问题讨论】:

代码山,这里:将错误报告添加到文件顶部error_reporting(E_ALL); ini_set('display_errors', 1); 看看它是否会产生任何结果。 嗨,我刚刚将它添加到我的代码中,没有任何东西仍然是空的,它似乎可以工作,但没有从我试图缩小错误范围的文件中上传文件 if(move_uploaded_file($file ['tmp_name'], $dest)) 正在返回 true 我只是放置了一个 echo 看看它是否会显示 【参考方案1】:

尝试取消对 mime 类型的检查,看看它首先给出了什么

【讨论】:

以上是关于PHP上传表单问题的主要内容,如果未能解决你的问题,请参考以下文章

PHP表单文件上传到Mysql和服务器

上传图片时PHP表单处理错误

阻止人们通过表单上传恶意 PHP 文件

表单不会使用 PHP 将带有文件上传的文本输入发布到 SQL 表

使用 HTML 表单、cURL 和 PHP 将文件上传到 Imageshack API

PHP 表单通过电子邮件发送的结果。我需要捕获表单中的上传文件