0

こんにちは、私は Web 開発は初めてですが、コーディングのバックグラウンドがあります。作成中のフォーム用に非常に単純な複数ファイルのアップローダーを作成しようとしていますが、私の人生ではそれを機能させることができません。私はオンラインで見つけたチュートリアルに従いました。ここに私がこれまでに持っているものがあります。私はうーんエコーハを得ています

HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"  dir="ltr">
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<body>
<form method="post" action="upload.php" enctype="multipart/form-data">
  <input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" onChange="makeFileList();" />
<input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" />
</form>
    <p>
        <strong>Files You Selected:</strong>
    </p>
    <ul id="fileList"><li>No Files Selected</li></ul>

    <script type="text/javascript">
        function makeFileList() {
            var input = document.getElementById("filesToUpload");
            var ul = document.getElementById("fileList");
            while (ul.hasChildNodes()) {
                ul.removeChild(ul.firstChild);
            }
            for (var i = 0; i < input.files.length; i++) {
                var li = document.createElement("li");
                li.innerHTML = input.files[i].name;
                ul.appendChild(li);
            }
            if(!ul.hasChildNodes()) {
                var li = document.createElement("li");
                li.innerHTML = 'No Files Selected';
                ul.appendChild(li);
            }
        }
    </script>
</body>
</html>

PHP

<?PHP
if(count($_FILES['uploads']['filesToUpload'])) {
  foreach ($_FILES['uploads']['filesToUpload'] as $file) {
    move_uploaded_file($file, "uploads/" . "sample.png" );
  }
}else{
echo "hmm";
}
?>

編集

OK、phpファイルをこれに更新し、元々ファイルを正しくエコーするエコーがありましたが、実際のアップロードを実行できません。既にアクセス許可を設定したアップロードディレクトリにファイルを追加したいだけですfilezillaで777になり、同じファイル名を維持したい

<?PHP
if(count($_FILES['filesToUpload']['name'])) {
  foreach ($_FILES['filesToUpload']['name'] as $file) {
    move_uploaded_file($file, "uploads/" . $file );
  }
}else{
}
?>

これまでご愛顧いただき、誠にありがとうございました。

4

1 に答える 1

3

あなたのコード

    count($_FILES['uploads']['filesToUpload'])

その要素は実際には $_FILES 配列に存在しないため、常にゼロを返します。

エラーが発生した場合は、$_FILES 配列を "print_r()" する方が役立つ場合があります (テストのみ)。複数ファイルのアップロード構文の例を次に示します。

    Array
    (
        [filesToUpload] => Array
            (
                [name] => Array
                    (
                        [0] => test.txt
                        [1] => test - Copy.txt
                    )

                [type] => Array
                    (
                        [0] => text/plain
                        [1] => text/plain
                    )

                [tmp_name] => Array
                    (
                        [0] => C:\xampp\tmp\php3770.tmp
                        [1] => C:\xampp\tmp\php3771.tmp
                    )

                [error] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )

                [size] => Array
                    (
                        [0] => 0
                        [1] => 0
                    )

            )

    )

count($_FILES['filesToUpload']['name']) を使用すると、スクリプトが修正されます。

編集

あなたのコードで

    if(count($_FILES['filesToUpload']['name'])) {
      foreach ($_FILES['filesToUpload']['name'] as $file) {
        move_uploaded_file($file, "uploads/" . $file );
      }
    }

move_uploaded_file() がアップロードされたファイルの tmpname (またはファイルパス) を探しているため、名前 (['name'] (配列要素) を $file として送信しています) は変換されません。持っているものをこれに変えることができます。

    if(count($_FILES['filesToUpload']['name'])) {
      foreach ($_FILES['filesToUpload']['tmp_name'] as $ref => $fullfilename) {
        move_uploaded_file($fullfilename, "uploads/" . $_FILES['filesToUpload']['name'][$ref] );
      }
    }

これで問題は解決しますが、これを処理するためのより良い方法があることを言及しておく必要があります。複数ファイルのアップロード用に持っているクラスを投稿して(またはGoogleで見つけて)、このページにコメントするようにリンクしてみます。しかし、上記は、あなたが探しているものを(最低限でも)得られるはずです。

于 2012-05-29T20:22:46.800 に答える