2009-11-30 11 views
15

私は非常に基本的なアップロードスクリプトを持っていますが、おそらくphp.net/move_upload_files関数ページからまっすぐ離れています。PHPファイルのアップロード、move_uploaded_filesの前に/ tmpからファイルが消えています

move_uploaded_file()は、tmpフォルダ内にtmpファイルが見つからないために失敗しました。しかし、そこに置かれていることを知っていますが、move_upload_file()がスクリプトで処理できるようになる前に削除されています。私はそれがそこに置かれていることを知っているので、そこに大きなファイルがサーバーに投稿されているときにファイルを見ることができます。

$_FILESには、アップロードしたばかりのファイルの正しい情報が含まれています。

私はそれを処理する機会がある前に、誰かがなぜ一時ファイルが/ tmpから削除されているのかわからなかったのですか?

ここに私が使用している基本コードがあります。

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_file)) 
{ 
    $result['error'] = 'false'; 
    $result['file_loc'] = $upload_file; 
} 
else 
{ 
    $result['error'] = 'true'; 
} 

print_r($_FILES)の出力は/ tmp phpIyKRl5は、単に存在しない/

[userfile] => Array 
(
    [name] => switchsolo.png 
    [type] => image/png 
    [tmp_name] => /tmp/phpIyKRl5 
    [error] => 0 
    [size] => 6690 
) 

のように見えるが。

+0

HTMLフォームを投稿してください。私はあなたのHTMLに問題があると思う。 –

+0

move_uploaded_file()が与える正確なメッセージは何ですか? –

+0

エラーログからメッセージを投稿してください –

答えて

-1

はあなたのform次のようにタグを使用する必要があります。

<form method="post" enctype="multipart/form-data" action="..."> 

使用multiple/form-dataenctypeように。

+2

enctypeが間違っていれば、$ _FILESは空ではありませんか? –

+0

わかりませんが、私はこれをテストしていません。しかし経験から、enctype = "mult ..."を忘れるたびに、私はファイルを持っていません。これを確認するのは簡単です。ライブHTTPヘッダーなどを使用して、ファイルが送信されているかどうかを確認します。 –

+0

間違いなくそれがあります。 – Bowen

0

実際にファイルが/ tmpに作成されていることを100%確信していますか?書き込み権限がない(またはスクリプトが実行されているユーザー)場合は、ファイルは/ tmpに書き込まれませんが、アップロード中は表示されます(実際にはアップロードが終了したときには表示されません)。

編集:$ _FILES ['ファイル'] ['エラー'] - 値:7;ファイルをディスクに書き込めませんでした。 PHP 5.1.0で導入されました。 PHPバージョンを確認してください。ディスクの書き込みが5.1以下であれば問題になるかもしれません。

+0

100%確かに、大きなファイルをアップロードしたときに作成されているのがわかりますが、完了するとすぐに消えるようです。 – Bowen

+0

ああ、ちょうど残りのコメントを読んでください。私たちは5.2を実行していますが、当面はtmpフォルダは777 – Bowen

-2
あなたはラウンド間違った方法 move_uploaded_file()の戻り値を使用している

:私はこの問題を自分で持っていた

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_file)) 
{ 
    $result['error'] = 'true'; 
} 
else 
{ 
    $result['error'] = 'false'; 
    $result['file_loc'] = $upload_file; 
} 
+1

です。正常に実行された場合、関数はTRUEを返します。 – Bowen

0

。私の場合、PHPは間違ったtmpフォルダにアップロードされていました。ドメインtmpフォルダ(pleskの仮想ホスト内)を使用する代わりに、OSの一時フォルダに直接アップロードしていました。

チェックあなたの一時フォルダのスクリプトの実行が終了した後にファイルが削除され

6

の設定。スクリプトを実行して、/ tmp /フォルダをチェックすると、ファイルは何に関係なく存在しません。

10

1)post_max_sizeとupload_max_filesizeの値がアップロードしようとしているファイルのサイズよりも大きいかどうかを確認します。

2)アップロードスクリプトの実行にmax_execution_time変数の値よりも時間がかかりますか?

3)あなたのアップロードスクリプトはmemory_limit変数が許す限り多くのメモリを消費しないと思います。クライアントがファイルをサーバーにアップロードするとき、サーバーはおそらくその中にその中のいくつかを保持しています。 php.iniのmemory_limit変数の制限に何らかの影響があるかどうかはわかりません。

これらの変数は、php.iniおよび/または.htaccessまたはini_set()で変更できます。

希望に役立ちます。

+2

ファイルアップロードの問題が発生するたびに、1または2に注意して解決されています。+1 – bradym

0

これは、Apacheが宛先ディレクトリにアクセスできない場合にも発生する可能性があります(ACLの変更を忘れないように!!)。

0

私は 'tmp_name'が '/ private/var/tmp /'に保存されていると言いますが、そこにファイルは存在しないという同じ問題がありました。

私はphp.iniの "変数の順序"に "E"を追加する必要がありました。 variables_order デフォルト値: "EGPCS"

希望します。

1

私は試していたhttp://www.w3schools.com/php/php_file_upload.asp そして、私は同じバグにつまずいた。

私の場合、$宛先の前に "./"を追加すると問題が解決しました。 )

print_r($_FILES)を見るとき、私は、正しい情報を得ていたが、move_uploaded_fileを実行することができませんでした。カントーそれを取得できませんでした - 私は、同様にこの問題を抱えていた

bool move_uploaded_file (string $filename , string $destination) 
1

は解決のためにこのウェブサイトに出くわしました...

move_uploaded_fileファンクションの$upload_fileパス属性をチェックして問題を解決しました。それ以外の場合は正常ではないことを確認してください(誤っていました)。

また、tempの場所にあるファイルは自動的に削除されます。私はこれがPHPの動作方法だと思います。

私はこれが助けてくれることを願っています。

+0

+1は、スクリプトが終了した後に一時ファイルが削除されたことを示しています。私はまだmove_upload_fileをやっていなかった...それはすべて一緒に働いていた。 – djnz0feh

1

宛先フォルダが存在しないか、書き込み権限がないこともあります。

if (!file_exists("upload")) { 
    if (mkdir("upload")) { 
    echo "Upload directory created!"; 
    } 
    else { 
    die("Invalid upload directory!"); 
    } 
} 
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
0

簡単なテスト。アップロードされたファイルのフォルダパスと名前を連結したときに "/"が不足している可能性があります。

0

が$ upload_fileに注意してください:move_uploaded_file()関数の前に右行う