PHP 上传表单无效

PHP Upload Form Not Working

此代码运行 index.php,其中用户输入元数据和文件:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="robots" content="noindex, nofollow" />
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Admin Page</title>
 <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  <![endif]-->
  </head>
  <body>
    <h2>Welcome!</h2>
    <h5><a href="/login0/logout.php">Logout</a></h5>
    <fieldset><legend>Upload Photo</legend><form name="photo" action="upload.php" method="POST" enctype="multipart/form-data">
      <input type="text" name="title" placeholder="Photo Title">
      <br /><br />
      <textarea placeholder="Description" name="desc"></textarea>
      <br /><br />
      <select name="scale">
        <optgroup label="Nikon">
         <option value="0" >Nikon Landscape</option>
           <option value="1">Nikon Portrait</option>
        </optgroup>
        <optgroup label="iPhone">
         <option value="2">iPhone Landscape</option>
        </optgroup>
       <optgroup label="Irregular and Cropped">
        <option value="3">Irregular Landscape</option>
        <option value="4">Irregular Portrait</option>
       </optgroup>
       <optgroup label="Legacy">
        <option value="_VOID_">None</option>
       </optgroup>
      </select>
      <br /><br />
      <input type="text" name="adv" id="adv" placeholder="Advanced Options">
      <label for="adv" class="warn">WARNING: Do not use!</label>
      <br /><br />
      <textarea name="gal" disabled>Gallery control from upload coming soon...</textarea>
      <br /><br />
      
      <b>Photo:</b> <input type="file" name="img" enctype="multipart/form-data">
      <b>Thumbnail:</b> <input type="file" name="thumb" enctype="multipart/form-data">
      <br /><br />
      <input type="submit" value="Upload" name="upload" id="upload"> <label for="upload" class="warn">WARNING: This cannot be undone!</label> 
    </form></fieldset>
   
   <fieldset>
       <legend>Edit a Photo</legend>
  <form action="edit.php" method="post" name="edit">
          <input type="number" name="id" placeholder="Photo ID">
          <input type="text" name="title" placeholder="Photo Title">
          <br /><br />
          <textarea placeholder="Description" name="desc"></textarea>
          <br /><br />
          <select name="scale">
        <optgroup label="Nikon">
         <option value="0" >Nikon Landscape</option>
           <option value="1">Nikon Portrait</option>
        </optgroup>
        <optgroup label="iPhone">
         <option value="2">iPhone Landscape</option>
        </optgroup>
       <optgroup label="Irregular and Cropped">
        <option value="3">Irregular Landscape</option>
        <option value="4">Irregular Portrait</option>
       </optgroup>
       <optgroup label="Legacy">
        <option value="_VOID_">None</option>
       </optgroup>
      </select>
      <br /><br />
      <input type="text" name="adv" id="adv" placeholder="Advanced Options">
      <label for="adv" class="warn">WARNING: Do not use!</label>
      <br /><br />
      <input type="submit" value="Edit" name="edits" id="edits"> <label for="upload" class="warn">WARNING: This cannot be undone!</label> 
        </form>
   </fieldset>
   <fieldset>
     <legend>Re-Upload a Photo</legend>
    <form action="re.php" method="post" name="re">
     <input type="number" name="id" placeholder="Photo ID"><br /><br />
     
        <b>Photo:</b> <input type="file" name="img" enctype="multipart/form-data">
        <b>Thumbnail:</b> <input type="file" name="thumb" enctype="multipart/form-data">
        <br /><br />
        <input type="submit" value="Re-Upload" name="res" id="res"> <label for="upload" class="warn">WARNING: This cannot be undone!</label>
    </form>
   </fieldset>
  </body>
</html>

这是在 upload.php 处找到的 PHP 代码,用于处理文件和元数据:

<?php
  $r = $_REQUEST;
  $p = file_get_contents("../data/photo.json");
  $d = json_decode($p, true);
  $o = array();
  $o['title'] = $r['title'];
  $o['desc'] = $r['desc'];

  $a = $r['adv'];
  $c = explode(" ",$a);

  $ext = ".jpg";
  $o['ext'] = $ext;

  $o['date'] = date("F j, Y"); // For reference only, removed from homepage

  $o['user'] = "*******"; // Unused by the system, since the system supports only one user

  $o['v'] = 2.0; // The version of the JSON data; used mostly for 'iocus' id check system

  $o['adv'] = $a; // For developer ref only, since all advanced options are precompiled and executed as photo uploads

  $o['auth'] = "Confedential"; // Ensures legit login

  $o['ssl'] = ($_SERVER['HTTPS'] != "" && $_SERVER['HTTPS'] != "off" && $_SERVER['HTTPS'] != NULL); // Verifies HTTPS

  $o['ip'] = $_SERVER['REMOTE_ADDR']; // Look at the name

  $o['scale'] = $r['scale'];

  $id = $d['nxt'];
  $o['id'] = $id;
  $o['iocus'] = "Confidential"; // Nobody knows what it does, but it's there...

  $encoded = json_encode($o);

  $d['nxt'] = $d['nxt'] + 1; // The next photo ID
  $d['photos'][$id] = $o;

  for($i=0;$i<count($c);$i++){
      switch($c[$i]){
          case "-blank":
              $d['photos'][$id] = [];
              break;
          case "-purge":
              echo "Fight the purge!  (it isn't functional yet)";
              break;
          case "":
              break;
          default:
              break;
      }
  }

  $n = json_encode($d,JSON_PRETTY_PRINT);

  file_put_contents("../data/photo.json",$n); // Submit JSON

  $_FILES['img'];
  $thumb = $_FILES['thumb'];

  $dir = str_replace("admin","",$_SERVER['DOCUMENT_ROOT']);
  $dir .= "photos/";

  // Upload photos
  if(move_uploaded_file($_FILES['img']['tmp_name'], $dir.$id.$ext)){
      echo "Photo: Success<br />";
      echo '<div style="color:green;font-size:32pt">GOOD</div>';
  }
  else{
      echo "Photo: Upload Error (Contact your server admin or developer)<br />";
      echo '<div style="color:red;font-size:32pt">ERROR</div>';
  }

  if(move_uploaded_file($thumb['tmp_name'], $dir."thumbnail/".$id.$ext)){
      echo "Thumbnail: Success<br />";
      echo '<div style="color:green;font-size:32pt">GOOD</div>';
  }
  else{
      echo "Thumbnail: Upload Error (Contact your server admin or developer)<br />";
      echo '<div style="color:red;font-size:32pt">ERROR</div>';
  }

  echo "<br />";
  echo "Photo ID (if you lose it, it's easy to find again): ".$id."<br />";
  echo 'To leave this page: <a href="/">go back</a>'; // Does not show up on page.  Odd...
?>

为了安全起见,一些代码被遗漏了,但我已经证明这些区域不是问题所在。该页面可以完美地容纳较小的文件,只是无法上传任何实际大小的文件。发生这种情况时,将保存 photo.json 上的元数据,而不是实际文件。

看起来您必须修改 php.ini 中的 upload_max_filesizepost_max_size 的值以允许具有更大文件大小的文件:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

修改 php.ini 个文件后,您需要重新启动 HTTP 服务器才能使用新配置。