PHP:文件上传无法正常工作

时间:2013-05-02 17:31:16

标签: html php

您好我是PHP的新手(我是一名asp.net开发人员)并且刚刚切换到PHP,因为我需要为我的朋友开发一个网站。我目前正在尝试将音乐文件上传到我网站上的文件夹中,但一直收到此错误:

  

注意:“第5行的C:\ xampp \ htdocs \ sitename \ admin \ uploader.php中的未定义索引:上传文件”

我尝试过以下步骤:

  1. 将max_upload_filesize和post_max_size设置为“1028M”。
  2. 在我的表单标记中添加了“enctype =”multipart / form-data“。
  3. 尝试过“print_r($ _ FILES);”并且数组继续返回空。
  4. 在新网站中使用上传脚本,效果很好。
  5. 尝试了很多不同的在线脚本,但没有工作,最后我尝试了这个,但仍面临同样的问题。
  6. 以下是我的代码:

    HTML

    <!DOCTYPE html>
    <html >
    <head>
        <title>ControlHome</title>
        <meta charset="utf-8">
        <link rel="stylesheet" href="../css/style.css">
        <link rel="stylesheet" href="css/admin.css">
        <script src="../js/jquery-1.7.1.min.js"></script>
        <script src="../js/superfish.js"></script>
        <script src="../js/jquery.easing.1.3.js"></script>
        <script src="../js/tms-0.4.1.js"></script>
        <script src="../js/slider.js"></script>
    <!--[if lt IE 8]>
       <div style=' clear: both; text-align:center; position: relative;'>
         <a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode">
           <img src="http://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg" border="0" height="42" width="820" alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today." />
        </a>
      </div>
    <![endif]-->
    <!--[if lt IE 9]>
        <script src="../js/html5.js"></script>
        <link rel="stylesheet" href="css/ie.css"> 
    <![endif]-->
    </head>
    <body>
    <div class="main-bg">
    
                             <div class="page">
                             <form method="GET" action="uploader.php" enctype="multipart/form-data> 
                               <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                 <tr>
                                   <td>
    <form enctype="multipart/form-data" action="uploader.php" method="POST">
        <!-- MAX_FILE_SIZE must precede the file input field -->
    Choose a file to upload: <input name="uploadedfile" type="file" /><br />
    <input type="submit" value="Upload File" />
    </td>
                                   <td>&nbsp;</td>
                                   <td>&nbsp;</td>
                                   <td>&nbsp;</td>
                                 </tr>
                               </table>
    </form>
                             </div>
                    </div>
                </div>
            </div>
        </section>
        <!-- Footer -->
        <footer>
        </footer>
    </div>
    </body>
    </html>
    

    PHP

    <?php
    ini_set('upload_max_filesize', '1028M');
    ini_set('post_max_size', '1028M');
    
    echo $_FILES['uploadedfile']['error'];
    print_r($_FILES);
    
    //**********************************************************************************************
    
    
    echo "Please wait while we attempt to upload your file...<br><br>";
    
    //**********************************************************************************************
    
    
    $target_path = "uploads/";
    
    $flag = 0; // Safety net, if this gets to 1 at any point in the process, we don't upload.
    
    $filename = $_FILES['uploadedfile']['name'];
    $filesize = $_FILES['uploadedfile']['size'];
    $mimetype = $_FILES['uploadedfile']['type'];
    
    $filename = htmlentities($filename);
    $filesize = htmlentities($filesize);
    $mimetype = htmlentities($mimetype);
    
    $target_path = $target_path . basename( $filename );
    
    if($filename != ""){
    
    echo "Beginning upload process for file named: ".$filename."<br>";
    echo "Filesize: ".$filesize."<br>";
    echo "Type: ".$mimetype."<br><br>";
    
    }
    
    //First generate a MD5 hash of what the new file name will be
    //Force a MP3 extention on the file we are uploading
    
    $hashedfilename = md5($filename);
    $hashedfilename = $hashedfilename.".mp3";
    
    //Check for empty file
    if($filename == ""){
    $error = "No File Exists!";
    $flag = $flag + 1;
    
    }
    
    //Now we check that the file doesn't already exist.
    $existname = "uploads/".$hashedfilename;
    
    if(file_exists($existname)){
    
    if($flag == 0){
    $error = "Your file already exists on the server!  
    Please choose another file to upload or rename the file on your
    computer and try uploading it again!";
    }
    
    $flag = $flag + 1;
    }
    
    //Whitelisted files - Only allow files with MP3 extention onto server...
    
    $whitelist = array(".mp3");
    foreach ($whitelist as $ending) {
    
    if(substr($filename, -(strlen($ending))) != $ending) {
     $error = "The file type or extention you are trying to upload is not allowed!  
    You can only upload MP3 files to the server!";
    $flag++;
    }
    }
    
    
    //Now we check the filesize.  If it is too big or too small then we reject it
    //MP3 files should be at least 1MB and no more than 6.5 MB
    
    if($filesize > 6920600){
    //File is too large
    
    if($flag == 0){
    $error = "The file you are trying to upload is too large!  
    Your file can be up to 6.5 MB in size only.  
    Please upload a smaller MP3 file or encode your file with a lower bitrate.";
    }
    
    $flag = $flag + 1;
    }
    
    if($filesize < 1048600){
    //File is too small
    
    if($flag == 0){
    $error = "The file you are trying to upload is too small!
    Your file has been marked as suspicious because our system has
    determined that it is too small to be a valid MP3 file.
    Valid MP3 files must be bigger than 1 MB and smaller than 6.5 MB.";
    }
    
    $flag = $flag + 1;
    
    }
    
    //Check the mimetype of the file
    if($mimetype != "audio/x-mp3" and $mimetype != "audio/mpeg"){
    
    if($flag == 0){
    $error = "The file you are trying to upload does not contain expected data.
    Are you sure that the file is an MP3?";
    }
    
    $flag = $flag + 1;
    }
    
    //Check that the file really is an MP3 file by reading the first few characters of the file
    $f = @fopen($_FILES['uploadedfile']['tmp_name'],'r');
    $s = @fread($f,3);
    @fclose($f);
    if($s != "ID3"){
    
    if($flag == 0){
    $error = "The file you are attempting to upload does not appear to be a valid MP3 file.";
    }
    
    $flag++;
    }
    
    
    
    //All checks are done, actually move the file...
    
    if($flag == 0){
    
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    
    
        //Change the filename to MD5 hash and FORCE a MP3 extention.
    
        if(@file_exists("uploads/".$filename)){
    
        //Rename the file to an MD5 version
        rename("uploads/".$filename, "uploads/".$hashedfilename);
    
        echo "The file ".  basename( $filename ). "
         has been uploaded.  Your file is <a href='uploads/$hashedfilename'>here</a>.";
    
        }  
        else{
          echo "There was an error uploading the file, please try again!";
        }
    
    
    } else{
        echo "There was an error uploading the file, please try again!";
    }
    
    }
    else {
    echo "File Upload Failed!<br>";
    if($error != ""){
    echo $error;
    }
    } 
    ?>
    

4 个答案:

答案 0 :(得分:0)

你错过了第一个表单上的结束符号标记(“)en enctype属性你打开另一个表单而没有关闭第一个表单,不需要有两个表单,你应该删除第一个开始表单标签。< / p>

答案 1 :(得分:0)

更改表单方法=“获取”....以形成方法=“POST”....

答案 2 :(得分:0)

检查服务器是否可以将文件写入tmp目录。如果需要,请显式设置PHP临时路径。

答案 3 :(得分:0)

这里试试这个

<!DOCTYPE html>
<html >
 <head>
  <title>ControlHome</title>
  <meta charset="utf-8">
  <link rel="stylesheet" href="../css/style.css">
  <link rel="stylesheet" href="css/admin.css">
  <script src="../js/jquery-1.7.1.min.js"></script>
  <script src="../js/superfish.js"></script>
  <script src="../js/jquery.easing.1.3.js"></script>
  <script src="../js/tms-0.4.1.js"></script>
  <script src="../js/slider.js"></script>
  <!--[if lt IE 8]>
   <div style=' clear: both; text-align:center; position: relative;'>
     <a href="http://windows.microsoft.com/en-US/internet-explorer/products/ie/home?ocid=ie6_countdown_bannercode">
      <img src="http://storage.ie6countdown.com/assets/100/images/banners/warning_bar_0000_us.jpg" border="0" height="42" width="820" alt="You are using an outdated browser. For a faster, safer browsing experience, upgrade for free today." />
     </a>
  </div>
<![endif]-->
<!--[if lt IE 9]>
<script src="../js/html5.js"></script>
<link rel="stylesheet" href="css/ie.css"> 
 <![endif]-->
</head>
<body>
<div class="main-bg">
<div class="page">
 <form enctype="multipart/form-data" action="uploader.php" method="POST">
     <table width="100%" border="0" cellspacing="0" cellpadding="0">
         <tr>
           <td>
              <!-- MAX_FILE_SIZE must precede the file input field -->
            Choose a file to upload: <input name="uploadedfile" type="file" /><br />
            <input type="submit" value="Upload File" />
            </td>
         </tr>
     </table>
</form>
</div>
</div>
</body>
</html>

您只需删除额外的表单标记并使用POST作为方法。