PEARの利用
Install
PHP用のパッケージ管理機能。OS Xでもつかえる。OS Xの場合インストールは
$ curl http://pear.php.net/go-pear | php
でOK。インストール対象のディレクトリによっては、phpのかわりにsudo phpにする。
もしかしたらphp.iniでPATHが通ってないかもしれないので、動作しないときはそこを確認。
extension_dir=に追記
利用法
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); //使ったら消す
一回目にアロケートした色でカンバスの色が初期化されることに注意。