2009-06-13 9 views
0

私は奇妙なエラーを抱えているようですが、私には分かりません。私のウェブサイトは1台のサーバで動作していましたが、新しいサーバに転送したときに動作を停止しました。私はこのコード行までのエラーを狭めてきたと信じて:move_uploaded_fileがハングしますか?

$ret = move_uploaded_file($tmp_name, $orig_path); 

これは、それがデバッグに少しトリッキーですので、AJAX呼び出しを介して実行されますが、スクリプトはエラーコードを返送して、私のことができますJavaScriptはalertです。だから、私はこれらのデバッグ文の2に包みました:

echo json_encode(array(

    'success' => false, 

    'errno' => $tmp_name.' -> '.$orig_path, 

)); 

exit; 



$ret = move_uploaded_file($tmp_name, $orig_path); 



echo json_encode(array(

    'success' => false, 

    'errno' => 'no error', 

)); 

exit; 

最初のものは正常に動作し、何か吐き出す:おそらく、私は、Linuxのnoobのビットだ

error /tmp/phpk3RICU -> /home/username/Websites/website/photos/o/2-4a3354dd017a9.jpg 

を、私は実際には私のシステム上で/tmp/phpk3RICUを見つけることはできません(スクリプトが終了するとすぐに削除されますか?)。しかし、それについてはもう一度秒です。

最初のデバッグチェックを削除してmove_uploaded_fileを実行させると、2回目のデバッグチェックが実行されないように見えます。これはmove_uploaded_fileがハングアップしていると思います。

$tmp_nameの代わりに、というファイルがあります。が存在しない場合は、2番目のチェックが実行されます。だから、それはちょうどそのtmpファイルを移動したくないようだが、それはエラーを報告していないようだ。

私はUnbutuマシンにLAMPスタックを新しくインストールしています。これはapt-getによってインストールされています...詳細が必要な場合はお知らせください。

ああ、関連性があるかどうかわかりませんが、ファイルはFlash経由でアップロードされます。

+0

mkdirは実際に失敗します...ファイルを作成するようには見えず、エラーを吐くこともありません。 – mpen

答えて

0

Ugh。問題はパーミッションにありました。 755は他のサーバーでは十分でしたが、このサーバーでは見えませんでした。本当にわからないのですが、PHPが別のユーザーで実行されていると思いますか?私はアクセス許可の仕組みがどのように機能するのかは分かりません。私が実際に悩んでいるのは、mkdirmove_uploaded_fileが失敗してfalseを返さなかった理由です...

1

ファイルをAJAX呼び出しでアップロードしますか? アップロードされたファイルは、アップロードしたスクリプトが実行を終了するとすぐに削除されます。そのため、/ tmpでは見つけることができません。

1

は、すべてのエラーを吐き出すためにPHPを言ってみてください。

error_reporting(E_ALL); 

それはあなたのサーバーのいずれかでそれを壊しているコンフィギュレーションの不一致である可能性があります。

注:move_uploaded_file()manualページからmove_uploaded_file() セーフモードと認識してopen_basedirの両方です。 ただし、 は、 ファイル名がこのような の制限と矛盾する可能性があるアップロードファイルの移動を が許可するように、宛先パスにのみ配置されます。 move_uploaded_file() の安全性を確保するために、 をアップロードしたファイルのみを移動することができます。

関連する問題