discuz プラグインを作成したいので、このプラグインの機能にはファイルをアップロードする機能が含まれるため、初心者の観点から PHP でファイルをアップロードする方法を学びました。
1.Form の属性 enctype、Baidu がこの単語を翻訳したところ、これはサーバーに情報を送信するためのエンコード形式を指定する encode type の略語であることがわかりました。
2. 入力のタイプ属性ファイル、この特別なファイルがアップロードされます。
if((($_FILES["ファイル"]["タイプ"]=="画像/gif")||($_FILES["ファイル"]["タイプ"]=="画像/jpeg")|| ($_FILES["ファイル"]["タイプ"]=="画像/pjpeg")) && ($_FILES["ファイル"]["サイズ"]
if($_FILES["ファイル"]["エラー"]>0){
echo "エラー: ".$_FILES["file"]["error"]."
";
}その他{
echo "アップロード: ".$_FILES["file"]["name"]."
";
echo "タイプ: ".$_FILES["file"]["type"]."
";
echo "サイズ: ".($_FILES["file"]["size"]/1024)."Kb
";
echo "「.$_FILES["file"]["tmp_name"]に保存されます;
」
}
if(file_exists("upload/".$_FILES["name"]["name"])){
echo $_FILES["file"]["name"]."すでに存在します。";
}その他{
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);
echo "保存場所: "."upload/".$_FILES["file"]["name"];
}
}その他{
「無効なファイル」をエコーします;
}
コードをコピー
このデモをデバッグしているときに、問題が発生しました。このデモを実行すると、PHP はアップロードが失敗したことを示す警告を報告しました。
このとき、変数 $_FILES を出力して確認しようと思い、出力したところ、error=1 が見つかり、アップロードされたファイルが php.ini のアップロード ファイル サイズを超えていることがわかりました。アップロードが失敗する原因となります。
私の新しい知識ポイントは次のとおりです:
コードをコピー
PHP プログラミング言語での一般的な $_FILES システム関数の使用法は次のとおりです:
$_FILES['myFile']['name'] はクライアントファイルの元の名前を表示します。
$_FILES['myFile']['type'] 「image/gif」などのファイルの MIME タイプ。
$_FILES['myFile']['size'] アップロードされたファイルのサイズ (バイト単位)。
$_FILES['myFile']['tmp_name'] は保存される一時ファイルの名前で、通常はシステムのデフォルトです。
$_FILES['myFile']['error'] ファイルアップロードに関するエラーコード。さまざまなコードの意味は次のとおりです:
0; ファイルが正常にアップロードされました。
1; ファイルサイズがphp.iniでシステムによって設定されたサイズを超えています。
2 ファイルサイズを超えました
MAX_FILE_SIZEオプションで指定した値。
3; ファイルの一部のみがアップロードされました。
4; ファイルはアップロードされませんでした。
5; アップロードされたファイルのサイズは0です。
コードをコピー
この時点で、エラーの原因がわかるはずです。デモを実行したところ、php.ini の制限を超えていることがわかったので、php.ini の設定を変更しました。
この php.ini アップロード制限の変更についての私の感想を要約すると、次のようになります:
まず、PHP アップロード ファイルのサイズ制限を変更したい場合は、php.ini の 2 つのパラメーターを変更する必要があります。1 つは Upload_max_filesize で、もう 1 つは post_max_size です。これら 2 つのパラメーターのサイズを変更するだけです。
2番目のステップはphp.iniの場所を見つけることです。私のローカルコンピュータは統合環境なので、php.iniは自分で構築した環境の場合はphpフォルダの下にあります。見つからない場合は、echo の下の phpinfo() に移動すると、php.ini ファイルの場所が表示されます。
以上です。私のような初心者でも、w3cshool でデモを実行し、インスタンスのアップロードを完了できます。
ファイルのアップロードに関して、discuz の他のプラグイン作成者によって開発されたプラグインを調べたところ、いくつかの小さな利点が見つかりました。共有するためにここに投稿します。
コードをコピー
$fileTypes = array('mp3','wav') //アップロードを許可するファイルの種類を定義します
$result = null;
$uploadDir = './mail' //アップロードパス
;
if(!submitcheck($_POST['formhash2'])){ //ファイルがアップロードされているかどうかを確認します
アウトアウトアウトアウトゴーイング
$result=lang('plugin/saya_mails', 'noname');
}その他{
「アップロードされたファイルを受け取る」
$myfileType = substr($myfile['name'], strrpos($myfile['name'], ".") + 1) //アップロードされたファイルのサフィックス名を取得する 2 つの方法
F // $ MyFiletyle = Substr (Strrchr ($ myfile ['name'], '.'), 1);
️ if ($myfile['size'] > 1024*1024*1024) { // アップロードされたファイルのサイズが制限を超えているかどうかを判断します
$result = lang('plugin/saya_mails', 'big');
} else if (!in_array($myfileType, $fileTypes)) { //アップロードが許可されているタイプかどうかを判断します
$result = lang('plugin/saya_mails', 'type');
} elseif (is_uploaded_file($myfile['tmp_name'])) { //ファイルが HTTP post 経由でアップロードされたかどうかを判断します
$toFile = './source/plugin/saya_mails/mail/' .
O if (@move_uploaded_file ($ myfile ['tmp_name'], $ tofile) {// ファイルをターゲット ストレージ アドレスにコピーします@是@是
@@
//
$result = lang('plugin/saya_mails', 'success');
} else {
$result = lang('plugin/saya_mails', 'unknown');
}
} else {
$result = lang('plugin/saya_mails', 'big');
}
}
}
コードをコピー
w3cshool のアップロード例を比較したところ、この著者の文章の方が完成度が高いと感じました
一般的なプロセスは次のとおりです:
1. ファイルがアップロードされたかどうかを判断するために、彼が使用するメソッドは通常、フォームによって渡された隠しパラメーターの値が存在するかどうかを判断するために使用されます。
2. アップロードされたファイルの名前が空かどうかを確認します。これは彼自身が書いた単なる入力です。
3. アップロードサイズを超えているかどうかを判断します。
4. ファイル拡張子名を取得し、それが許可されたアップロード ファイル タイプであるかどうかを判断します。
5. ファイルが http post 経由でアップロードされているかどうかを確認します。
6. 保存したファイルを移動します。
上記のプロセスに関して、私が新たに得た知識点を個人的にまとめました。
1. ファイルのサフィックス名の取得に関して、オリジナルのプラグイン作成者は、関数 strrpos() を使用して「.」の位置を返し、関数 substr() をインターセプトして、アップロードされたファイルのサフィックスを取得していました。
ここで、strrpos()関数ですが、私自身の理解では文字列戻り位置の略称のはずですが、もちろんまだ確認していません!この関数は、文字列内で最後に見つかった文字列の位置を返し、この位置を返します。つまり、後ろから前にチェックして、最初に表示される位置を見つけます。参考アドレス:http://www.w3school.com.cn/php/func_string_strrpos.asp
こちらの原作者はこの方法で判断しており、確かに可能だとBaiduで調べたところ、この方法はstrrchr()関数やsubstr()関数でも実装できることが分かり、自分が考えた方法をコメントしました。内部はほぼ同じです。 strrchr() 関数は、検索対象の文字列の最後から最後までの文字列を返します。 参考アドレス: http://www.w3school.com.cn/php/ func_string_strrchr.asp
アップロードされたファイルのタイプが標準を満たしているかどうかを判断するには、$_FILES["file"]["type"] で判断するのではなく、上記の 2 つの方法を使用します。これは、初心者にとっては、より良い判断ポイントです。 print $_FILES パラメータについてはすでに知っていますが、type 属性については判断が難しいです。
2. is_uploaded_file() を使用して、ファイルが http 経由でアップロードされたかどうかを判断します
3.move_uploaded_file() の前の @ は、エラー メッセージと警告をブロックするために使用されます
http://www.bkjia.com/PHPjc/735883.html
www.bkjia.com
truehttp://www.bkjia.com/PHPjc/735883.html技術記事 discuz プラグインを作成したいので、このプラグインの機能にはファイルをアップロードする機能が含まれるため、初心者の観点から PHP でファイルをアップロードする方法を学びました。 まず、w3cshool がケースを確認しました...