• 締切済み

【PHP】tmp_nameの命名規約について

PHPアプリケーション上でファイルをアップロードすると、$_FILESにいくつか情報が格納されます。 その中の一つ["tmp_name"]にはテンポラリファイル名(デフォルトだと/tmp/XXXXX...でしょうか)が 格納されていますが、このテンポラリファイル名の「命名規約」について、解説のページ・書籍等はないのでしょうか? いろいろ見ているとファイル名の先頭は「php」であったり、大小英数字がランダムで設定されていたりしていることは見て取れたのですが、バラバラで規則じみていなかったもので...。 こんな質問で恐縮なのですがご存知の方いらっしゃいましたら、ご回答のほどお願いいたします。

みんなの回答

noname#244856
noname#244856
回答No.1

Github - php-src https://github.com/php/php-src/ こちらからC言語で書かれたPHPの構成コードを検索してみました。 1. 「tmp_name」で検索 2. 検索結果より、「tmp_name」はC言語中の変数では「temp_filename」に対応していると推測 3. 「fd = php_open_temporary_fd_ex(PG(upload_tmp_dir), "php", &temp_filename, 1 TSRMLS_CC);」に目をつける 4. 「php_open_temporary_fd_ex」のプロトタイプを見ると第2引数が「const char *pfx」となっているので、これが「prefix」を意味すると推測 5. 「fd = php_do_open_temporary_file(dir, pfx, opened_path_p TSRMLS_CC);」に目をつける 6. 結果的にWindowsAPIの「GetTempFileName」もしくはLinuxAPIの「mkstemp」「mktemp+VCWD_OPEN」を叩いているところにたどり着く コードを見る限り、OSがランダム生成した文字列にプレフィックス「php」を付加していることは確認できますね。各APIに関しては下を参照してください。mktempはファイル名を得るだけの関数で自前で作成(VCWD_OPENをコール)しなければなりませんが、自動的に作成してくれるmkstempがコール可能な場合はそちらを利用する実装になっているようです。 GetTempFileName http://msdn.microsoft.com/ja-jp/library/cc429354.aspx mkstemp http://kazmax.zpp.jp/cmd/m/mkstemp.3.html mktemp http://kazmax.zpp.jp/cmd/m/mktemp.3.html

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 命名規約は連番でいいのか?

    私はWeb開発者です。 下請け開発の場合に必ず命名規約に疑問を感じます。 原因は「ソースファイル名や画面名、テーブル名などに連番をつける」命名規約が多いからです。 自社で開発する場合は連番は使いません。 連番を付ける理由はいくつか考えられますが、どれも全て単なる慣習としてしか見えないのです。 ・COBOL時代にそうしていた ・管理がしやすい。(Excelで扱いやすい) 連番ではなく、各ソースの役割で命名するほうが、理にかなっていると思います。 1、他に理由があれば教えてください。 2、大規模なシステムでも連番では命名したりしないよ、という実例をご存知の方は教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • PHPでのファイルアップロード。リネーム機能実装

    インターネット上でフリーで配布されていたPHPスクリプトです。 <?php if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"], 0644); echo $_FILES["upfile"]["name"] . "をアップロードしました。"; } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; } ?> --- files フォルダにファイルをアップロードするのですが このままアップロードすると、同じファイル名でアップした場合ファイルが上書きされてしまいます。 アップロードした時、[お腹すいた.zip] だった場合、[20120808-1958-お腹すいた.zip]のように 時間と日付を入れたいのですが、私の知識では調べて試してみたのですが、白紙になる限りで うまくいきません。 どなたかご教授頂けませんでしょうか。

    • ベストアンサー
    • PHP
  • tmpのつくファイルは・・・

    いつもお世話になっています。 とても初歩的な質問かもしれませんが、教えてください。 昨日PC内にあるファイルを探していたところ、種別がTMPファイルというものが、とても多いことに気づきました。 これって、全て削除してしまってよいものなんでしょうか? あと、フォルダ名がxxxxx.tmpというものもあるのですが、こちらも削除してしまってよいものでしょうか? もし消してはいけないものが混じっている場合には、どうやって要・不要を見分ければよいのかについても、併せて教えてください。 よろしくお願いします。

  • phpエラー

    現在phpの練習をしてるんですが教科書通りにプログラミングをしてもうまく動きません。 次のコードでおかしな部分があるのでしょうか? よろしくお願いします。 <html> <head> <title>アップロード</title> </head> <body> <form enctype="multipart/for-data" action="http://192.168.11.8/upload.php" method="post"> ファイル:<input type="file" name="myfile"/><br/> <input type="submit" value="送信"/> </form> <?php if(isset($_FILES["myfile"]["tmp_name"])){ // myfileがスーパグローバルに一時ファイルとして保存されたら $filename = "./" . $_FILES["myfile"]["name"]; // その相対パスを格納 if(move_uploaded_file($_FILES["myfile"]["tmp_name"], $filename)){ // 第一引数の一時ファイルを第二引数の場所からアップロード print "送信しました。\n"; } else{ print "送信に失敗しました.\n"; } } ?> </body> </html>

    • ベストアンサー
    • PHP
  • rails:booleanのカラム名の命名規約は?

    ちょっと興味が湧いたので質問をさせてください。 皆さんの案件で、railsプロジェクトをやっていた場合、booleanの型のカラム名の命名規約はどうしていらっしゃるでしょうか? 私の属しているプロジェクトでは、元々がPHPでできていたプロダクトだったので、その時の規約であった カラム名の末尾に「_flg」をつけているものはbooleanに従って開発をしていました。 ここの規約自体の批判は置いておいていただいて、仮に新規でプロジェクトを立ち上げる場合は、どの様な命名規約にするでしょうか? ログイン周りの自動生成をしてくれるgemのdeviceだとpublicedなど、過去分詞でカラム名を生成しています。 railsチュートリアルなどでは「single_issue」等で名詞のカラム名を、ままで使っています。 (これはこれでrailsチュートリアルがおかしい気がしますが) この規約だと、"公開されている記事一覧を取得する"とかの場合にscopeとして、Article.publicedとつけたい場合に、これと名前が衝突して混同する、トイうデメリットがありますし、名詞をままで付けると、そもそもこのカラムがbooleanであるニュアンスが消えてしまいます。 結局なところ、支配的な命名規約はまだ出来ていない、今のところはある程度好み ということなのかなと思っています。 そうであれば、各々の案件での命名規約を知りたくなったので質問をさせていただきました。 どうか、宜しくお願い致します。

    • ベストアンサー
    • Ruby
  • PHPファイル・アップロードに関する質問

    あるPHP技術書籍で掲載のPHPファイル・アップロードの例を試したところ、アップロードするファイル・サイズは、小さいな(数KB)場合が成功、より大きな場合(例えば40KB~)が失敗!何故失敗なのかよく分かりません。ファイル種類には関係なさそうです。 詳しい方に教えて頂ければ助かります。 ※ ご参考 - 1. 具体的なHTML&PHPコードは、次の通りです。 2. 利用環境: 最新版XAMPP、Windows 7、XAMPPデフォルト・ルートをD:のある フォルダーに変更。D:に十分空き領域があると確認済み(数十GB)。 =====HTML===================== <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>fupload</title> </head> <body> <h3>ファイルアップロード</h3> <form method="POST" action="fupload.php" enctype="multipart/form-data"> <!-- MAX_FILE_SIZE は、必ず "file" input フィールドより前になければなりません --> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> <!-- input 要素の名前が $_FILES 配列での名前となります --> <input name="userfile" type="file" size="70"/> <input type="submit" value="アップロード" /> </form> </body> </html> =====PHP--===================== <?php $uploaddir = './up/file/'; $uploadfile = basename($_FILES['userfile']['name']); echo '<pre>'; //if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$uploadfile)) { echo "ファイルアップロードに成功しました。\n"; } else { echo "ファイルアップロードは不成功です。\n"; } echo '<pre>'; ?> =====PHP関連設定(php.ini)========-== ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. ; http://php.net/file-uploads file_uploads=On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ; http://php.net/upload-tmp-dir upload_tmp_dir="C:\xampp\tmp" ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize=2M ; Maximum number of files that can be uploaded via a single request max_file_uploads=20

    • ベストアンサー
    • PHP
  • PHPで音楽ファイルのアップロード

    ファイルをHTMLのINPUTでファイルを選択し、 アップロード後、メールに添付して送信を行おうとしているのですが、 音楽ファイル(weve,mp3等)がアップロードできません。 画像ファイルはアップロード・添付してメール送信できるのですが、音楽ファイルは使用する関数等が 異なるのでしょうか? $uploadfile1_size = $_FILES['uploadfile1']['size']; $uploadfile1_name = $_FILES['uploadfile1']['name']; $uploadfile1_tmp = $_FILES['uploadfile1']['tmp_name']; $uploadfile1_tmpを出力しても何も表示されないため、アップロードからできていないと思いますが分かりません。 どうか教えて下さい。よろしくお願いします。

    • 締切済み
    • PHP
  • PHP ファイルupロードのセキュリティ

    ただいま ファイルUPロードするための簡単なPHPプログラムをせいさくしています 。 セキュリティの部分とか足らないところがるとは思うのですが、 下のプログラjムをどうやって改造すればいいのでしょうか? たとえば 容量を制限する。 ファイル種類を限定する等  おしえて頂きたいと思っています。 よろしくお願いたします。 <body> <p><?php if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"], 0644); echo $_FILES["upfile"]["name"] . "をアップロードしました。"; } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; } ?></p> </body> </html>

    • 締切済み
    • PHP
  • アップロードしたファイル名をランダムに書き換え

    <?php move_uploaded_file($_FILES["upload_file"]["tmp_name"], "../mov/" . $_FILES["upload_file"]["name"]); echo 'document.getElementById("mov").value="',$_FILES["upload_file"]["name"],'"'; ?> 以上のようなアップロードされたファイルをmovフォルダに移動し、さらにそのファイル名をエコーするPHPがあるのですが、 途中でファイル名をランダムな「数字10桁.拡張子」に変換してmovフォルダに移動し、そのファイル名を上記の様な形に沿ってエコーしたいのですが、どのようにすればよろしいでしょうか。

    • ベストアンサー
    • PHP
  • PHPでのファイルアップロードについて

    初めて質問させていただきます。 PHPの勉強をはじめたばかりの初心者です。教本をもとに勉強を進めています。すべて教本どおりに設定し進めてきましたが、ファイルアップロードの箇所でどうしてもうまくいきません。いろいろ、php.iniを修正したり、PHPを修正したりしましたが本どおりの結果になりません。ご指導お願いします。 以下2種類のhtmlファイルとphpファイルを使用 (1)upform.htmlの内容 <HTML><BODY> <FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA" ACTION="upload.php"> <INPUT TYPE="FILE" NAME="upfile"><br> <INPUT TYPE="SUBMIT" VALUE="アップロード"> </FORM> </BODY></HTML> (2)upload.phpの内容 <html><body> <?php if(move_uploaded_file ($_FILES['upfile']['tmp_name'], "./htdocs/phpbook/" ) == FALSE) { print "失敗しました。"; }else{ print ($_FILES['upfile']['name']); print "をアップロードしました。"; } ?> </BODY></HTML> 上記内容でhtmlファイルを呼び出し、abc.txt(デスクトップに保存している)をアップロードしようとすると、以下のエラーが返されます。 ↓↓エラー内容 Warning: move_uploaded_file(./htdocs/phpbook/) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpB.tmp' to './htdocs/phpbook/' in C:\Program Files\Apache Group\Apache2\htdocs\phpbook\upload.php on line 7 失敗しました。 ↑↑エラー内容 いろいろ思考錯誤し、upload.phpファイルの6行目"./htdocs/phpbook/"の箇所を、"abc.txt"としてみると、『アップロードしました』とアップロードに成功(?)し、abc.txtはC:\Program Files\Apache Group\Apache2\htdocs\phpbook内にアップロードされました。 教本では、"./htdocs/phpbook/"はファイルの保存先と注記されていますが、エラーになります。"abc.txt"に書き換えることでアップロードに成功しています。また、なぜ、アップロード先がC:\Program Files\Apache Group\Apache2\htdocs\phpbook内になるのかもわかりません。php.iniファイルの設定でしょうか。質問が長くなり、また、内容に足りない面もあるかもしれないですが、どうかよろしくお願いします。 【参考】 php.iniのFile Uploadsを抜きました。 ;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M

    • ベストアンサー
    • PHP