0

フォームをプレビュー ページ (フォーム) に送信してから、最終送信しています。move_uploaded_file を動作させるのに問題があります。どうすればこれを解決できますか? ディレクトリを確認すると、そこにファイルがありません。

プレビューページ

      $tmpname = $_FILES['titleimage']['tmp_name'];
            $imagefile = $_FILES['titleimage']['name'];
          $filename = basename($imagefile);
           $imagename = dirname(__FILE__).'/avatar/'.$filename; 

            echo "<form enctype='multipart/form-data' id='submitpreview' action='/upload' method='POST'>
<input type='hidden'  name='image' value='$tmpname' readonly />
    <input type='hidden'  name='imagedir' value='$imagename' readonly />";
                        //other code
                echo "<div id='preview-submit-button'><a>Submit</a></div>
                </form>";

アップロードページ

$image = $_POST['image'];
$directory = $_POST['imagedir'];

move_uploaded_file($image,$directory);
4

1 に答える 1

1

$_FILES['titleimage']['tmp_name']2 番目のフォームを送信した後、一時ファイルがまだ残っていますか? 覚えておいてください、これは一時ファイルです。残念ながら、最初のフォームが送信されたとき (リクエストが処理されるまで) だけ存続します

したがって、次のことを行う必要があります。

  1. できるだけ早く (つまり、最初のフォームを受け取るページで、実際にはプレビュー ページで) を使用して一時ファイルを自分のフォルダーに保存しますmove_uploaded_file()

  2. ユーザーがプレビューを確認したら、関数を使用して、手順1でファイルを保存したディレクトリから最終的なフォルダーにファイルを移動しますrename()

  3. ユーザーがプレビューを確認しないunlink()場合は、関数を使用して削除します。


さらに、Marc Bが指摘したように、プレビュー保存ロジックのセキュリティを確認する必要があります。非表示のフォーム フィールドにパスとファイル名を渡すことは、ハッカーがシステムを破壊するのを助ける非常に良い方法です。PHP Sessionsを見てください (既にご存知かもしれません)。そのパスをパブリック フォームからセッション変数に移動することを検討してください。

于 2012-06-05T14:25:42.947 に答える