ホーム > タグ > PHP

PHP

【PHP】’ImagickException’ with message ‘No IDATs written into file

今まで見たこと無いエラーが出てきたので。

うーうーうなってたらげこさんが調べてくれました。

http://rubyforge.org/forum/forum.php?max_rows=100&style=nested&offset=2021&forum_id=33

By: Tim Hunter RE: Writing an image to STDOUT [ 返信 ] 2005-11-18 13:18 A follow-up: I checked this out last night. It turns out that to_blob works with 0×0 GIF and MIFF images, and raises a MagickException for a 0×0 PNG image. However, if you call to_blob with a 0×0 JPEG image then libjpeg will exit. I’ve added a check to to_blob for this case. With the test, if you call to_blob for a 0×0 JPEG image to_blob will raise a RunTimeError exception.

「0×0の画像を writtenImage() しようとするとエラーが出るよ!」 ってことらしいです。

実際のコードを見てみたら、 グローバルで定義した変数を、関数の中で使うときに、 global hoge; ってやってなかったので、値が全部 NULL になったのが原因のようでした。

エラーメッセージでググっても答えが見つからなかったのでタイトルにしてしまうのです。

【PHP】ディレクトリを削除しようとしたらはまった

ファイルを書き出すスクリプトを作ってる際、 既に書き出し用のフォルダが存在していたらそのディレクトリを削除する っていう関数を作ろうと思ったらまんまとはまったのでメモ。

まずはここを参考にディレクトリ削除の関数を作ってみる。

PHP:ディレクトリを削除する|STUDIO WING .lib

  function delDir($path){
    if($handle = opendir($path)){
      while($item = readdir($handle)){
        if($item != '.' && $item != '..'){
          if(is_dir("$path/$item")){
            delDir("$path/$item"); //再帰
          }else{
            unlink("$path/$item");
            echo "...";
          }
        }
      }
      echo "<br/>";
    }
    closedir($handle);
    rmdir($path);
  }

とりあえずこれで特に問題なく動くかと思われたものの、 数字のみ(0~の連番)のディレクトリだけ何故か削除されない模様。 色々調べてるうちに下記のエントリに行き着いた。

ディレクトリ内のファイル一覧を取得する|Affirmative Way

正しくは以下のように取得してやる PHP: readdir – Manualより引用 警告 この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される 0 や “” といった値を返す可能性もあります。詳細については 論理値のセクションを参照してください。この関数の返り値を調べるには ===演算子 を使用してください。

ということなので下記のように書き換え。

  function delDir($path){
    if($handle = opendir($path)){
      while(false !== ($item = readdir($handle))){ //!== ってしないとディレクトリ名が"false"になることもある
        if($item != '.' && $item != '..'){
          if(is_dir("$path/$item")){
            delDir("$path/$item"); //再帰
          }else{
            unlink("$path/$item");
            echo "...";
          }
        }
      }
      echo "<br/>";
    }
    closedir($handle);
    rmdir($path);
  }

これで無事削除完了。 文字列 ”0” も “==” だと false なのよね。。

というわけで2011年初エントリ。

【PHP】ファイルをダウンロードするときに確認ダイアログを表示する

JPEGとかPNGとかの画像をダウンロードさせるページを作っていたのですが、 aタグのhrefに画像のパスを書いても、対象の画像に遷移して困ってしまいました。 ZIP等をダウンロードするときみたいに確認ダイアログを出したかったので、 色々調べてみました。

perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法 | perl/CGI | 阿部辰也のブログ――人生はひまつぶし。

ここのPHPのソースを一部改変してJSからドーンします。

&lt;?
$files = $_GET;
$src = &quot;./hoge/{$files['filename']}&quot;;</p>

<h1>HTTPヘッダを送信</h1>

<p>if(file_exists($src)){
header(&quot;Content-type: application/octet-stream&quot;);
header(&quot;Content-Disposition: attachment; filename=\&quot;{$files['filename']}\&quot;&quot;);</p>

<h1>出力</h1>

<p>readfile($src);
}else{
  header(&quot;Location: ./fuga.html&quot;);
}
?&gt;

header(“Content-Disposition: attachment; filename=\”{$files['filename']}\”"); ここの記述でダイアログを表示させる(ついでにファイル名を決めることができる)ようですが、 セキュリティ的に問題もある模様。 [Studying HTTP] HTTP Header Fields

あと、ファイルによってMIMEタイプ(Content-Type)が異なるので、それもなんとかしなければならず。 PHP の mime_content_type() を使おうとするも非推奨とのことで断念。 とりあえず application/octet-stream とすることで回避(と言えるのかわかりませんが)しました。

で、このPHPをJSから叩く

    $('a.download').click(function(e){
      e.preventDefault();
      var filename = ($(this).attr('href')).split('/');
      filename = filename[filename.length-1];
      location.href = './fuga.php?filename='+filename;
    });
firebug とかで href 書き換えられて押されたりすると怖いので、 ファイル名の部分だけを切り取って送るようにしました。

ここまでできたので、今度は欲しい画像を選んでZIPに圧縮してダウンロード、とか作りたいのですが。 さぁ、時間が無い。

■おまけ application/octet-stream とはなんぞ web用語辞典 – application/octet-stream

なんだかわからないけど何かのファイル っていう意味っぽいです。

【PHP】関数の前についてる@(アットマーク)ってなんだろう

っていうのが前々から気になってました。 ライブラリとか誰かが作ったコードとか見てると、結構書いてあるこの@(アットマーク)。 やっと調べたのでメモっておきます。

Continue reading

OAuth覚え書き その2

先日のエントリー OAuth覚え書き で、エラーが発生したところで躓いたという記事を書きましたが、無事解決しました。

解決方法は下記。

Continue reading

OAuth覚え書き

追記 このエントリーでの問題は解決しました。 解決編はこちらからどうぞ。

twitterの認証方式にOAuthというものがあるとのことで、色々やってみることにしました。 とりあえずPHPでやってみます。 以下覚え書き(自分用メモなんでだいぶ端折ってます。わかりづらくてごめんなさい)。

参考ページ: PHP+OAuthでTwitter – SDN Project TwitterのbotをOAuthに対応させる – しばそんノート Sinatra と OAuth を使って Twitter のタイムラインを取得してみた – まちゅダイアリー(2009-08-18)

Continue reading

【PHP】 file_get_contentsで躓いた

会社でやってて躓いた(半月ほど前に

下記の /hoge.php を /fuga.php から呼び出すとして。

hoge.php

<?php
  echo 'hogafuge';
?>

fuga.php

<?php
  $file1 = file_get_contents('./hoge.php');
  $file2 = file_get_contents('http://unolabo.boo.jp/hoge.php');
?>

$file1 , $file2 それぞれの出力は、

echo $file1;

<?php
  echo 'hogafuge';
?>

echo $file2;

hogefuga

と、なるらしい。べんり

最初 $file1 のほうでやっててできません!てなったんだけど、 $file2 でやると出力結果が取れるんですよ、と言われました。(Apachがどうとかっていう説明と共に

でも、readfile(); でも同じなのかすら・・

とりあえず眠いのでまたこんど。

Home > Tags > PHP

Search
Feeds
Meta

Return to page top