Hi-farm blog

ActionScript 3.0 , AIR , FLEXからCocoa, OpenGL

Archive for the ‘PHP’ Category

PHP5のこと。

PHP4のサポートが終了してから、結構な時間が経ち、レンタルサーバーでもPHP4を打ち切るところが出てきましたが、

変更点の一つが、

php.iniのallow_url_fopenがデフォルトではoffであることです。

ってことは、http経由でごにょごにょしている人には、file関数とか、fopenとかに問題がでる恐れがあります。

それを回避するには、様々な方法がありますが、一つには、socket通信する、という方法があります。

使い方はこんなふうです。要はPHPでtelnetしてる感覚ですね。

ちなみに、以下の例では、80番ポートと決めうちしてアクセスしているので、サイトによっては別途ポートを指定する必要があります。

 

$domain = "www.hi-farm.net"; // 対象ドメイン

$file = "sample.php"; // URL以下のパス(GETも使えます)

$fp = fsockopen($domain, 80, $errno, $errstr, 4); // 80番ポートに接続

$out = "GET /{$file} HTTP/1.1\r\n"; 

$out .= "Host: {$domain}\r\n";

$out .= "Connection: Close\r\n\r\n";

 

fwrite($fp, $out);

stream_set_timeout($fp, 4);

 

while(!feof($fp))

{

	$file_data0 .= fget($fp);

}

fclose($fp);

 

セキュリティうんぬんはわかるので、PHP側での対応はわかるけど、php.iniでしか変えれないのよね。。。

レンタルサーバーやっている業者さんは、単に「変更されますので準備しろ」だけでなくて、テストする環境を用意してくれよ

って思います。。。

 

ぐちってしまった。。。
  • 0 Comments
  • Filed under: PHP
  • PearのFile/Archive.phpをMODxで

    ちょっと料理名っぽいですが。

    MODxをちょい前から使っているのですが、このMODxは動的にサイトを見せることも可能だし、静的HTMLのエクスポートも可能。

    で、今回は、MODxはサイトのジェネレータとして使う事を考え、エクスポートしたファイルをダウンロードできる仕組みを作成。

    簡単に言えば、

    1. managerから、『サイトのエクスポート』
    2. zipダウンロードするmoduleを作成し、指定階層以下のフォルダをzipにしてダウンロード

    という流れです。

    で、2のところですが、pearのFile/Archive.phpを使いました。

    使い方としては、

    前提としては、$tardir:zipファイルを作成するフォルダ

    File_Archive::extract(
    File_Archive::read( $tardir.’export/’ ),
    File_Archive::toArchive(’Files.zip’, File_Archive::toOutput() )
    );

    でいけるはずなのですが、zipを展開できなかった。(Binaryで見てみると、圧縮しているというよりは、ファイルの頭がHTML宣言だったので、きっと圧縮に失敗している)
    なので、一度サーバでファイルを作成し、ダウンロードしてからzipファイルを削除 という流れに変更。
    変更後がこれ。

    File_Archive::extract(
    File_Archive::read( $tardir.’export/’ ),
    File_Archive::toArchive($tardir.’Files.zip’, File_Archive::toFiles() )
    );

    $params = array(
    ‘file’ => $tardir.’Files.zip’,
    ‘contenttype’ => ‘application/zip’,
    ‘contentdisposition’ => array(HTTP_DOWNLOAD_ATTACHMENT, ‘Files.zip’),
    );

    $ret = HTTP_Download::staticSend($params);

    unlink($tardir.’Files.zip’);

    これで無事zipファイルをダウンロードできました。

    2008年2月13日21:28

  • 0 Comments
  • Filed under: MODx, PHP
  • 今月はオフィスを離れて仕事をする事が増えるだろう、ということで、メインマシンである、MacBookで移動中も開発すべく、ローカルにMAMPをインストール。

    で、PHPMyAdminの画面を開いても、エラーがでる。

    『#2002 – サーバが応答しません (あるいはローカルの MySQL サーバのソケットが正しく設定されていません) 』

    ってね。

    うーん。。。。。とうなってると、原因はどうやら、PHPMyAdminで使うMySQLの設定が違ってたみたい。

    /Applications/MAMP/bin/phpMyAdmin/config.inc.phpのこの箇所をこう記述。
    $cfg['Servers'][$i]['extension'] = ‘mysqli’; 

    無事動く。

    当たり前ですね。MySQLのバージョンが5.0.41なんだから。

    ってかさいっしょっからその設定に変えておいてよ。

    2008年2月3日23:36

  • 0 Comments
  • Filed under: MySQL, PHP, apache
  • PHPでの文字化け

    PHPでの文字化けに対して、詳しい情報を書いているBLOGを見つけました。
    http://hain.jp/index.php/tech-j/2007/02/13/p125

    本文に書いている、

    文字化けが何かというのはご存じのとおり。
    PHPにおいて文字化けが起こる理由は

    勘違い・思いこみ
    これ以外に存在しない。

    という言葉が衝撃的であったが、php.iniのmbstring.internal_encodingが実は内部エンコードではない、ということなどを詳しく説明してくれている。

    初心者向けの書籍などは、詳しく書きすぎても混乱するだけなので省略したり、少々間違っててもわかりやすく記述するのはわかるのだが、internal_encodingなのに『内部エンコード』ではない、というのはちょっと。。。

    他にも、
    自動変換を利用しない
    ということや、php.iniにおいて設定すべき項目、設定すべきではない項目を書いてくれていて、とてもわかりやすかったです。

    2007年9月11日19:36

  • 0 Comments
  • Filed under: PHP