0

画像をアップロードするための php スクリプトを作成しました。スクリプトとアップロード フォルダーの両方が htdocs フォルダーにあります。これが私のスクリプトです。

<head>
<title>Upload an Image</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta name="generator" content="Geany 0.21" />
<style type="text/css" title="text/css" media="all">
  .error {
      font-weight: bold;
      color:#Coo;
  }
</style>
    </head>

    <body>
<?php
     if($_SERVER['REQUEST_METHOD']=='POST') {
      if(isset($_FILES['upload'])) {
          $allowed = array('image/pjpeg','image/JPG','image/X-PNG','image/png','image/x-png');
          if(in_array($_FILES['upload']['type'],$allowed)) {
              if(move_uploaded_file($_FILES['upload']  ['tmp_name'],"../uploads/{_FILES['upload']['name']}")) {
                  echo '<p><em>The file has been uploaded!</em>  </p>';
              }
          }
          else {
              echo '<p class="error">Please uploaded a JPEG or PNG   image.</p>';
          }
      }
      if($_FILES['upload']['error'] > 0) {
          echo '<p class="error">The file could not be uploaded because: <strong></p>';
          switch ($_FILES['upload']['error']) {
              case 1:
                print 'The file exeeds the upload_max_filesize setting in php.ini';
                break;
              case 2:
                print 'The file exeeds the MAX_FILE_SIZE setting in the HTML form';
                break;
              case 3:
                print 'The file was only partially uploaded.';
                break;
              case 4:
                print 'No file was uploaded';
                break;
              case 6:
                print 'No tmp folder was available';
                break;
              case 7:
                print 'Unable to write on the disk';
                break;
              case 8:
                print 'File upload stopped';
                break;
              default:
                print 'A system error occured';
                break;
            }
            print '</strong>';

        }
            if(file_exists ($_FILES['upload']['tmp_name']) &&    is_file($_FILES['upload']['tmp_name']) ) {
                unlink ($_FILES['upload']['tmp_name']);
        }
    }
?>
<form enctype="multipart/form-data" action="upload_image.php" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="524288" />
  <fieldset><legend>Select a JPEG/PNG image of 512KB or smaller to be uploaded:</legend>
  <p><b>File:</b><input type="file" name="upload" /></p>

  </fieldset>
  <div align="center">
  <input type="submit" name="submit" value="Submit" />
  </div>
</form>
</body>
</html>

次のようなエラーが表示されます: Warning: move_uploaded_file(../uploads/110221110100_96.png): failed to open stream: No such file or directory in /opt/lampp/htdocs/upload_image.php on line 27

警告: move_uploaded_file(): 27 行目の /opt/lampp/htdocs/upload_image.php の '/tmp/phph4iy1j' を '../uploads/110221110100_96.png' に移動できません。

しかし、私はすべての必要な権限を設定しました.....助けを楽しみにしています、ありがとう

4

2 に答える 2

0

相対パスとの混乱を避けるために、最初に絶対パス (つまり/home/foo/project/uploads) を使用しmove_updated_file()ます。

それでも失敗する場合は、アップロードされたファイルを のようなものに移動してみてください/tmp/foo。それが機能する場合、問題は、画像を移動しようとしているアップロードフォルダーに基づくアクセス許可です。

于 2013-03-03T18:59:52.423 に答える
0

ジェームズが言ったように、アップロードディレクトリを絶対にする必要があります。私はおそらくサーバードキュメントルートの方法で行くことを除いて.

if(move_uploaded_file($_FILES['upload'] ['tmp_name'], $_SERVER['DOCUMENT_ROOT']."/uploads/".$_FILES['upload']['name'])) {
    echo '<p><em>The file has been uploaded!</em>  </p>';
}

これは$_SERVER['DOCUMENT_ROOT']解決すること/opt/lampp/htdocsを前提としています-私はあなたのパスを見てそう思います。

print_r($_SERVER['DOCUMENT_ROOT'])実際のパスが何であるかを確認できます。

パブリック フォルダーにファイルをドロップする前に、MIME タイプを検証し、ファイルの名前を変更することをお勧めします。そのままでは、コードが悪意にさらされる可能性があります。しかし、それは別の議論のためです。

于 2013-03-04T06:38:47.423 に答える