1

サーバーに画像をアップロードするために使用move_uploaded_file()していますが、通常は次のエラーが発生します。

Warning: move_uploaded_file(upload/file.png) [function.move-uploaded-file]: 
failed to open stream: No such file or directory in 
/home/newuser/public_html/model/account.class.php on line 39

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move       
'/tmp/phpuLkUgE' to 'upload/file.png' in     
/home/newuser/public_html/model/account.class.php on line 39

root アクセスでフォルダーを 777 に設定し、このように正しく表示するため、これは許可ベースではありません。ls -l

755 /home/newuser/public_html/model
755 /home/newuser/public_html/model/account.class.php
777 /home/newuser/public_html/upload

PHPライン

move_uploaded_file($_FILES["photo"]["tmp_name"], "../upload/file.png");

問題は、所有者/グループの設定が正しく構成されていないことにあると思います..しばらく前に、すべてのサイトを1つのアカウントのサブドメインとして持っていました:

/home/olduser/public_html/subdomains/index.html

次に、これを変更し、新しいユーザー アカウントを作成して別の Web サイトを簡単に管理し、ファイルを移動しました ...

/home/olduser/public_html/subdomains
/home/newuser/public_html/index.html

の新しいフォルダー/home/newuserは現在所有され、グループ化されてnewuser newuserいますが、php が as で実行されnobody olduserている可能性があるため、これが問題の原因である可能性がありますか?

これを修正するにはどうすればよいですか?

4

2 に答える 2

1

特定のファイル/ディレクトリへのアクセス許可は、ディレクトリ自体に適用されるだけでなく、そのディレクトリまでのパス全体に適用されます。

例:

/home/ - needs 'x' permission (execute)
/home/newuser/ - needs 'x' permission
/home/newuser/public_html/ - needs 'x' permission
/home/newuser/public_html/avatar/ - needs 'wx' permission (execute + write)
于 2012-06-05T02:57:14.720 に答える
0

Jack's Answer の下の Silver89 のフィードバックで間接的に触れられていましたが、はっきりとは述べられていませんでした。;)

move_uploaded_file() の宛先について私が見つけた最善の方法は、完全な絶対パスを使用することです。Unix\Linux サーバーと Windows サーバーのどちらを使用しているかによって異なりますが、これで基本的な考え方がわかります。

職場の Unix サーバーでは、「../anything」を使用することはできませんが、/var/www/html/uploads/imagename.jpg..

これが、Silver89 さんの前回のテストがうまくいった理由です。おそらく、サーバーがhttp://yourservername.com/upload/file.pngではなく に画像をアップロードしようとしたためですhttp://www.yourservername.com/yoursubfolder/upload/file.png。おそらく「../」部分が完全に破棄され、そのフォルダーはサーバーに存在しませんでした。

サーバー (ターミナル/ssh など) にログオンして「pwd」コマンドを発行するか、PHP コードを使用して getcwd() コマンドをフォルダ内の削除された php ファイルにエコーすることで、そのフル パス名を確認できます。あなたのイメージは行きます。

このサイトは、さまざまな PHP サーバー構成チェック関数を使用して、サーバーに基づいてこれを理解するのに役立ちます - 下の表を参照してください。これらを次のように画面にエコーアウトするだけです。

echo $_SERVER["SCRIPT_FILENAME"]. 

これは私にとっては大変なことだったので、次の人が見つけやすくなることを願っています - これが生後 8 か月であっても。;)

于 2013-02-07T22:53:59.060 に答える