ホームページ php教程 php手册 PHP の move_uploaded_file 関数が画像の移動に失敗する問題を解決する

PHP の move_uploaded_file 関数が画像の移動に失敗する問題を解決する

Sep 30, 2016 am 09:23 AM

問題の説明:
本日、ユーザー登録時にアバター画像ファイルをアップロードするPHPスクリプトを実装する際に問題が発生しました:PHPスクリプトは事前に決定されています

ブラウザ側でファイルをアップロードする際にエラーは発生しません。
アップロードされたファイルは合法です。
アップロードされるファイルは画像ファイルです。
サーバー側で一意のファイル名が生成されています。
コード
次に行うべきことは、ファイルを一時的な場所から固定の場所に移動することなので、次のスクリプトを書きました:

//ファイルを一時的な場所から固定の場所に移動します @move_uploaded_file($_FILES[$image_fieldname]['tmp_name'], $upload_filename) または handle_error("画像ファイルの保存中にエラーが発生しました", "ファイルの移動中にエラーが発生しました" . "{$upload_filename }");
コードの handle_error() 関数は、move_uploaded_file 関数がエラーを実行すると、エラーページにジャンプします。明らかに何か問題が発生しました。まず、関数のパラメータにエラーがあるかどうかを確認しました。

$_FILES[$image_fieldname]['tmp_name']$upload_filename //これは私が自分で結合したファイルパスであり、正しいことが保証されています

PHPマニュアルによると、関数に渡した上記の2つのパラメータはnoであることが保証されています問題がありますが、何が起こっているのでしょうか? ページではエラーが報告されていません (関数の前に PHP の「@」演算子を使用しているため、ページではエラーが報告されません)

@オペレーター

注: コードで PHP の @ 演算子を使用する場合は注意してください。

@ 演算子を使用すると、無効なユーザー入力や不正な列を含む SQL クエリ、さらには標準以外の URL エラーに起因する可能性のあるすべての問題を回避できます。つまり、人気のある Web サイトでは、クラッシュしたり停止したりすることができないため、@ 演算子はコードからエラー メッセージをマスクすることができます。この状況における他のエラー解決ソリューション。

エラーログファイルを探しています

PHP開発環境を構築する際にxamppを使用していたため、その時は@演算子がエラーメッセージをブロックしていることに気づきませんでした。開発キットなので、error_log ファイルはインターネット上のほとんどの記事に記載されているものとは異なります。最終的には、
(私のホストは ubuntu) で見つかりました。 php_error_log ファイルはパス
/opt/lampp/logs

で見つかりました。もちろん、Apache の error_log ファイルもこのパスに保存されています。 php_error_log ファイルには、権限が不足しているというエラーが見つかりました。エラーが発生した場所: 保存した画像の宛先ディレクトリには、PHP を実行するユーザーの権限がありません。PHP スクリプトを実行するユーザーは、スクリプト コードを記述して画像フォルダーを作成したユーザーと同じではありません。

実際には、そのような面倒なことをする必要はありません。関数の前の @ 演算子を削除し、エラー処理関数 handle_error() 関数を削除するだけで、エラー メッセージが表示されます。ウェブページ。

ターゲット フォルダーのアクセス許可を変更します

何はともあれ、問題の原因が見つかりました。これは非常に喜ばしいことです。フォルダーのユーザーとアクセス許可が間違っているため、次の問題を変更するだけで済みます。

写真が永続的に保存されるフォルダーを所有するユーザーを変更し、Apache を実行し、PHP スクリプトを実行するユーザーに変更します。
フォルダーの権限を 755 に変更します

それでは、Apache を実行しているユーザーは誰でしょうか?PHP スクリプトを使用して以下を取得します。

echo exec('whoami'); //ファイルを実行するユーザー名を取得し、それによって画像フォルダーの権限を変更します
このようにして、スクリプトを実行したユーザーを取得しました: デーモン。私とは違うこと。
フォルダーを所有するユーザーを変更しましょう:

chown daemon -R ~/web/hello_php/uploads
~/web/hello_php/uploads は、画像を保存するターゲット パスです。 -R は、このディレクトリ内のフォルダーのユーザーを再帰的に変更することを意味します。

次にフォルダーの権限を変更します


chmod 775 -R ~/web/hello_php/uploads

これで完了です


参考文献: http://www.manongjc.com/article/1494.html

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)