• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Zend_Fileの検証がおかしい)

Zend_Fileの検証が問題あり?

このQ&Aのポイント
  • アップされたファイルの検証を行っているのですが、MIMEタイプが取得できません。
  • 他の検証は正常に動作します。エラーコードは『fileMimeTypeNotDetected』です。
  • マニュアルを参照しても解決方法がわからず、何度やってもMIMEタイプの取得ができません。どうすれば解決できますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Zend_Validate_File_MimeTypeの中身を見てみました。 メンバ変数の$_magicFilesにて指定されているmagicファイルでmimeタイプを識別しているようです。 ご利用のOSがWindowsですと、指定されているパスがLinux用のもののようですのでファイルが存在せず、mimeを検証出来ずに全てエラーになるんだとおもいます。 >$adapter->addValidator('MimeType', true, array('image/jpeg', 'image/gif', 'image/png')); ここの構文ですが、最後の引数の配列を、 array( 'magicfile' => 'c:\xampp\php\extras\magic.mime', //xamppだとこのパスですが、xampp以外だったらphpディレクトリ以下を探してみてください 'image/jpeg', 'image/gif', 'image/png', ) と書き換えてみてはいかがでしょう。(改行やコメントは見やすくするためのものですので削っていいです。)

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

関連するQ&A

  • addruleでアップロードさせる画像の種類をコントロールする

    こんにちは pearの addruleについてご質問させていただきます。 phpのフォームからアップさせる画像の種類をコントロールしたいのですがaddruleのmimetypeでできると思ったのですがうまくいきません。 下に記述したように jpg, jpeg, gif, png, xbm だけをアップ可能にしたいのですが、なぜか今gifのみアップでき、他がすべてエラーになってしまいます。 はじめに $pictype という配列を作成しそこにアップ可能なタイプを指定、それをaddruleで読み込んでいるつもりなのですが... 間違いのご指摘お願いいたします。 $pictype = array('image/jpeg','image/jpeg','image/gif','image/png','image/x-xbitmap'); $this->addRule('pic1', '■写真1* が読み込めません。写真は (jpg, jpeg, gif, png, xbm) が使用可能です', 'mimetype', $pictype );

    • 締切済み
    • PHP
  • mp3について

    プログラム初心者です 容量小さ目のmp3のアップ ロードする方法をおしえてください 拡張子はmp3のみ対応できれば満足です 画像をアップロードする場合と違うところはどこでしょうか?(気をつけなければいけないとこはありますか?) IMEタイプはmp3の場合どうなりますか? 他のエラー処理は画像アップロードとほぼ同じだと思うので省略しています 下記の画像アップロードを少し改造して作れないでしょうか?(下記の部分だけわかればなんとかなるかもしれません) // 画像ファイル情報取得 $info = getimagesize($tmp_name);//画像の幅、高さ、拡張子、<img>タグ内でそのまま使用できる文字列、ビット/ピクセル、チャンネル数、MINEタイプを配列で取得(偽装対策) // 取得に失敗したときは画像ファイルではない if ($info === false) { throw new Exception('nogif');//画像ファイルではありません } // MimeTypeを調べる switch ($info['mime']) { case 'image/gif': $mime = $ext = 'gif'; break; case 'image/png': $mime = $ext = 'png'; break; case 'image/jpeg': $mime = 'jpeg'; $ext = 'jpg'; break; default: throw new Exception('mime');//この種類の画像形式は受理できません } よろしくお願いします

    • ベストアンサー
    • PHP
  • zend frameworkでの拡張について

    PHP5.2.4、zend framework1.9.5を使用しています。 Zend_Captcha_WordクラスのgetSession関数内の $this->_session->setExpirationHops(1, null, true); を $this->_session->setExpirationHops(2, null, true); に書き換えたいのですが、できれば元のファイルを書き換えることなく 例えばZend_Captcha_WordExというZend_Captcha_Wordを継承したクラスで getSession関数を書き換えればいいと思ったのですが、しかしそうすると Zend_Captcha_Wordを継承している class Zend_Captcha_Image extends Zend_Captcha_Word{ } や class Zend_Captcha_Figlet extends Zend_Captcha_Word{ } までZend_Captcha_WordExに書き換えないといけないので、 この派生クラスを作って書き換えるやり方は現実的ではないと思いました。 zend frameworkにおいてこういう場合はどのようなやり方で記述すれば良いのでしょうか?

    • 締切済み
    • PHP
  • Zend_Form_Element_Hash

    zend_formを使っておりCSRF対策として使えるようだったので Zend_Form_Element_Hashを試しているのですが以下のようなエラーになります。 「The two given tokens do not match」 ちなみにソースはこんな感じです。 $this->setMethod('post'); $this->addElement('text', 'username', array( 'label' => 'ユーザ名:', 'required' => true, 'validators' => array( 'Alnum', 'NotEmpty', ) )); $this->addElement('password', 'password', array( 'label' => 'パスワード:', 'required' => true, 'validators' => array( 'Alnum', 'NotEmpty', array('StringLength', false, array(8)), ) )); $this->addElement('submit', 'login', array( 'ignore' => true, 'label' => 'Submit', )); $this->addElement('hash', 'csrf', array( 'ignore' => true, )); ソースを確認したところhiddenに値は埋め込まれてありました。 エラーからすると一致しないとの事なので$request->getPost()を 参照してみましたが確かに全く違う値でした。 というか、ポストされエラーがなければ生成した乱数をセッションに 登録し確認画面でhiddenの値とセッションの値が一致すればOKという のが普通ですよね? しかし、セッションをvar_dumpしても乱数が登録されてる様子もなく 何と比較しているのか根本的なところが謎です。。。 echo $this->_form->getValue('csrf'); 上記のようにしても乱数の取得ができずマニュアルを見ても解決策が 全くわからないのですがどのようにすればうまく動作するのでしょうか?

    • ベストアンサー
    • PHP
  • PHP で動的ファイル出力

    PHP 猛勉強中です、またお世話になりますm( __ __ )m ドキュメントルート外に置いたイメージファイルを HP からリンクして表示できるように readfile 関数を使った PHP ファイルを作成しようと思っています。 readfile.php に対して URL クエリーでhttp://hoge/readfile.php?name=hage&ext=jpg のような感じで呼び出したいと思っています。 ※ name はファイル名、 ext は拡張子です。 [readfile.php] <?php $_name = ""; $_ext = ""; if(isset($_GET["name"]) === true && isset($_GET["ext"]) === true){ // null byte 対策 $_name = delete_nullbyte($_GET["name"]); $_ext = delete_nullbyte($_GET["ext"]); // ディレクトリトラバーサル対策 $_name = str_replace(".", "", @htmlspecialchars($_name, ENT_QUOTES, "UTF-8")); $_ext = str_replace(".", "", @htmlspecialchars($_ext, ENT_QUOTES, "UTF-8")); }else{ exit(); } $_file_path = "/home/xxx/img/" . $_name . "." . $_ext; // ファイル存在確認 if(file_exists($_file_path) === false){ exit(); } // MimeType 取得 $_ext_type = substr($_file_path, -3); $_mime_type = ""; if(strcasecmp($_ext_type, "jpg") === 0){ $_mime_type = "image/jpeg"; _out_file($_file_path, $_mime_type); }else{ exit(); } ///////////////////////////////////////////////// // ファイル出力 function _out_file($file_path, $mime_type) { // ファイル名取得 $_fname = @basename($file_path); // ファイルストリーム取得 header('Content-Type: ' . $mime_type); header("Content-Disposition: inline; filename='" . $_fname . "'"); readfile($file_path); } ///////////////////////////////////////////////// // null byte 除去メソッド function delete_nullbyte($str) { if(is_array($str) === true){ return ""; } return str_replace("\0", "", $str); } ?> 色々作業を進めるうちに「null byte 攻撃」や「ディレクトリトラバーサル攻撃」などの言葉が耳に入ってきてセキュリティ的に不安を感じています。 自分なりに調べて上記のようなコーディングをしましたが、果たして問題が無いのか、それとももっとたくさん考えなくてはならないのか、先輩方の意見が聞きたく質問させていただきました。 よろしくお願いしますm( __ __ )m

    • ベストアンサー
    • PHP
  • getimagesize()を使用して画像の種類を取得するには?

    getimagesizeを使用して画像の種類(JPEG,GIFなど)を取得したいのですがなかなかうまくいきません。ソースは以下の通りです。 <?php $image = $_POST['image']; if(isset($_POST['add'])){ $img_type = getimagesize($image); if($img_type['mime'] == "image/jpeg"){ print"JPEGです。"; }elseif($img_type['mime'] == "image/png"){ print"PNGです。"; }else{ print"JPEG,PNG以外です。"; } } ?> <form action="this.php" method="post"> <input type="file" name="image"> <input type="submit" name="add" value="チェック!"> </form> よろしくお願いします。

    • ベストアンサー
    • PHP
  • zend_dbについて

    $dbAdapter->setFetchMode(Zend_Db::FETCH_ASSOC); // 取得カラム名配列 $column = array('id', 'title', 'message', "IFNULL(file, 'noimage.jpg') AS file"); // 並び順設定配列 $order = array('id DESC'); // オブジェクト生成 $select = $this->dbAdapter->select() ->from('mtb_feature', $column) ->where('del_flg != ?', 1) ->limit(1) ->order($order); // 抽出を実行 $stmt = $select->query(); // 初期化 $row = array(); // 抽出したデータを取り出す $row = $stmt->fetchAll(); この場合は問題ないのですがfetchAllをfetchRowや他のものにするとエラーになってしまいます。 マニュアルを参照してみたのですが原因がわかりませんでした。fetchAll以外で値を取得したいのですがこの場合どうすればできますでしょうか?

    • ベストアンサー
    • PHP
  • ファイルアップロード aviファイルがUPできない!!

    質問させて下さい。 現在、会員制写真サイトを管理しております。 PHPにてファイルアップロードシステムを組み、UPできるファイル形式やサイズを制限しております。 抜粋ロジックは下記のようになります。 $mime_type = $_FILES['form_file']['type']; switch( $mime_type ) { case "image/gif": case "image/pjpeg": case "image/x-png": move_uploaded_file( $_FILES['form_file']['tmp_name'], $targetDIR.$_FILES['form_file']['name'] ); ~中略~ break; case "video/x-ms-asf": case "video/x-ms-wmv": case "video/x-msvideo": case "video/quicktime": case "video/mpeg": case "audio/x-pn-realaudio": case "application/x-shockwave-flash": move_uploaded_file( $_FILES['form_file']['tmp_name'], $targetDIR.$_FILES['form_file']['name'] ); ~中略~ break; default: メッセージ出力(うぷ出来ません。); break; } ※静止画と動画によってログファイルへの記録方法を分けています。 aviファイルのMIMEタイプは "video/x-msvideo" であると判断したのですが、複数のaviファイルでテストした結果、うぷ出来ませんとなってしまいました…。 テストしたファイルは、Divxエンコのものと、Windows内にあった、clock.avi というファイルです。 どのようにしたら aviファイルをうぷすることが出来るでしょうか? そもそも、MIMEタイプの指定が間違っているのでしょうか? ご教授頂けたら幸いです。

    • ベストアンサー
    • PHP
  • 画像アップロード機能を追加しようとしましたが、できません

    画像アップロード機能を追加しようとしたのですが、できません。 こちらのhttp://www.new-f.com/に置かれているRPGキャラクターシート管理CGIver2.00に ローカルから画像をアップできるようにしたいと思っております。 こちらhttp://www.ss.iij4u.or.jp/~somali/web/_perl_upload.htmlにcgi.pmを使う方法がありましたので、 ソースをそのまま流用して、ファイルアップができるかどうかを確認し、問題なくファイルアップができましたので、そのソースをを追記してみました。 文法チェッカーなどでは、特に問題ないと出たのですが、入力ををする時点まではできるのですが、 送信すると、500エラーとなってしまいます。 どのようにしたら、画像アップが可能になるでしょうか? それとも、この方法では不可能なのでしょうか? 追記した部分(エディタTeraPad使用/102桁で折り返し) 40行目~ # POSTサイズの上限 $CGI::POST_MAX = 1024 * 1024; # 1MB $query = new CGI; # キャラクタ更新フォーム # 最大許容サイズ(KByte) my $maxsize = 300; # 保存先ディレクトリ my $logfiles = "./imgs"; # アップロードを許可するファイルの種類(MIMEと拡張子) my %hash_mime = ( 'image/gif' => 'gif', # GIFファイル 'image/jpeg' => 'jpg', # JPEGファイル 'image/pjpeg' => 'jpg' # プログレッシブJPEGファイル ); 77、78行目 # 画像アップ upfile(param('upfile')) if ( param('upfile') ); 207行目 <INPUT size="40" type="file" name="upfile"  value="$logfiles/$set"> 686、687行目 if ( $logfiles/$set eq "" || $logfiles/$set eq " "){print OUT "No Photo Data.";} else{print OUT "<img src=\"$logfiles/$set\" width=\"250\" alt=\"キャラクタ画像\">";} 976行目~ sub upfile{ #送られてきたデータを処理する ----------------- # ファイル取得 my $fH = $query->upload('filename'); # エラーチェック if ($query->cgi_error) { my $err = $query->cgi_error; &error("$err") if ($err); } &error("File transfer error.") unless (defined($fH)); # MIMEタイプ取得 my $mimetype = $query->uploadInfo($fH)->{'Content-Type'}; # 保存するファイル名を取得 my $set = &set_name($mimetype); # ファイルサイズ取得 my $size = (stat($fH))[7]; # サイズ制限 &error("The filesize is too large. Max $maxsize KB") if ($size > $maxsize * 1024); # ファイル保存 --------------------------------- my ($buffer); open (OUT, ">$logfiles/$set") || &error("Can't open $set"); binmode (OUT); while(read($fH, $buffer, 1024)){ print OUT $buffer; } close (OUT); close ($fH) if ($CGI::OS ne 'UNIX'); # Windowsプラットフォーム用 chmod (0666, "$logfiles/$set"); } # ファイル名を設定 ----------------------------- sub set_name { my ($mime) = @_; # 拡張子をセット my $ext = $hash_mime{$mime} ? $hash_mime{$mime} : &error("Can't permit this file."); # ファイル名のフォーマット my $set = time . "_" . $$ . "." . $ext; return $set; }

    • ベストアンサー
    • CGI
  • ファイルのアップロード$_FILESデータの取得方法

    php.iniのregister_globals=offに設定したときのファイルのアップロード で$_FILESのデータがうまく取得できません。 []_FILES .[]userfile = Array ..[]size = Array ..[]name = Array ..[]tmp_name = Array ..[]type = Array 取得したいデータはsize.name.tmp_name.typeです。 よろしくお願いいたします

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • 先日、数百万単位の現金を紛失しました。個人的な経験からモチベーションの持ち方を知りたいです。
  • 紛失した現金は商売上ではなく、個人的なものでした。現在、モチベーションが低下しています。
  • 現金を失ったことにより、何もする気がなくなり、困っています。モチベーションの持ち方を教えてください。
回答を見る