PHP

Last-modified: 2010-11-23 (火) 00:14:00

PEARの利用

Install

PHP用のパッケージ管理機能。OS Xでもつかえる。OS Xの場合インストールは

$ curl http://pear.php.net/go-pear | php

でOK。インストール対象のディレクトリによっては、phpのかわりにsudo phpにする。
もしかしたらphp.iniでPATHが通ってないかもしれないので、動作しないときはそこを確認。

extension_dir=に追記

source

利用法

pecl install <package name>[-alpha|-beta...]

たとえば

pecl install id3-alpha

備考:このライブラリは安定性が低すぎてつかいものにならない。プレイヤーなどで認識されるファイルに対してメモリ確保失敗で読み込みに失敗する。Segmental Faultする場合もある。

  • 例:
    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 1968009472 bytes) in /.../id3.php on line 6

PHP often used Functions and memos

file/directory走査

指定したディレクトリ以下のファイルとフォルダを走査し、その配列を返す。
出典: PHP: opendir - Manual
作者: cgray at metamedia dot us

<?php
/**
* directory_list
* return an array containing optionally all files, only directiories or only files at a file system path
* @author     cgray The Metamedia Corporation www.metamedia.us
*
* @param    $base_path         string    either absolute or relative path
* @param    $filter_dir        boolean    Filter directories from result (ignored except in last directory if $recursive is true)
* @param    $filter_files    boolean    Filter files from result
* @param    $exclude        string    Pipe delimited string of files to always ignore
* @param    $recursive        boolean    Descend directory to the bottom?
* @return    $result_list    array    Nested array or false
* @access public
* @license    GPL v3
*/
function directory_list($directory_base_path, $filter_dir = false, $filter_files = false, $exclude = ".|..|.DS_Store|.svn", $recursive = true){
    $directory_base_path = rtrim($directory_base_path, "/") . "/";
    if (!is_dir($directory_base_path)){
        error_log(__FUNCTION__ . "File at: $directory_base_path is not a directory.");
        return false;
    }
    $result_list = array();
    $exclude_array = explode("|", $exclude);
    if (!$folder_handle = opendir($directory_base_path)) {
        error_log(__FUNCTION__ . "Could not open directory at: $directory_base_path");
        return false;
    }else{
        while(false !== ($filename = readdir($folder_handle))) {
            if(!in_array($filename, $exclude_array)) {
                if(is_dir($directory_base_path . $filename . "/")) {
                    if($recursive && strcmp($filename, ".")!=0 && strcmp($filename, "..")!=0 ){ // prevent infinite recursion
                        error_log($directory_base_path . $filename . "/");
                        $result_list[$filename] = directory_list("$directory_base_path$filename/", $filter_dir, $filter_files, $exclude, $recursive);
                    }elseif(!$filter_dir){
                        $result_list[] = $filename;
                    }
                }elseif(!$filter_files){
                    $result_list[] = $filename;
                }
            }
        }
        closedir($folder_handle);
        return $result_list;
    }
}
?>

utf8表示されている文字化けshift_jisをなおす

windowsからmac上のFTPサーバに転送したとき、日本語ファイルが化けたが、だいぶぶんURLEncodeの形式だったのに、一部のnon-ASCII文字がそのまま残ってしまった。
これを解決するために書いたのが次。ただし、一部正常に元に戻せないことが確認されている。
作者: hYagni
License: 著作権放棄,完全任意
echo mb_convert_encoding(urldecode(preg_replace("#([\200-\377])#e", "'%'.(dechex(ord('\\1')))", $fname)), "UTF-8", "SJIS") . "\n";

PHP正規表現

preg_match("/pattern/",$in,$out);
$outは配列
$out[0]はマッチングした文字列($in)$out[1]以降がヒットした文字。

画像を扱う

GDを使うととても簡単。
関数はライブラリを参照。

流れ:

$img = ImageCreateTrueColor($x,$y); //カンバス作成 TrueColorじゃないと、いろいろ不具合があるので気をつける。
$black = ImageColorAllocate($img, 0x00, 0x00, 0x00); //色など定義
//なんか書く
ImageColorDeAllocate($img,$black); //使ったら消す

一回目にアロケートした色でカンバスの色が初期化されることに注意。