memo.xight.org

日々のメモ

カテゴリ : PHP

9ページ目 / 全10ページ

CSV形式でのデータのダウンロード

方法

  1. サーバ側でCSVファイルを作成し,ダウンロードさせる
  2. Header関数でContent-typeを出力し,整形したデータをそのまま返す

サンプル

/* HTTPヘッダの出力 */
Header("Content-disposition: attachment; filename=test.csv");
Header("Content-type: application/octet-stream; name=test.csv");
/* データを出力 */
echo $contents;

Reference

  Do You PHP? - CSV形式でのデータダウンロード
  http://www.pat.hi-ho.ne.jp/dimension/sample/sample_ora_csv.shtml

連想配列の走査


$a = array(
	"one"	 => 1,
	"two"	 => 2,
	"three" => 3,
);
foreach ($a as $k => $v){
	echo "\$a[$k] => $v\n";";
}

出力例

$a[one] => 1
$a[two] => 2
$a[three] => 3

一言

  Debug時の $_SESSION の dump に利用

セッション管理

値の渡し方

  $_SESSION['idx'] = $idx;
  <form action="somewhere.php?"> // セッションID 管理

方法

  // セッションを開始/復元
  session_start();
  // セッション変数登録
  session_register(idx);
  $_SESSION['idx'] で取り出せる.

Reference

  PHP 基礎編6 - 数値関数、その他
  rand、floor、ceil、round、$REMOTE_ADDR - SAK Streets
  http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/php_k06.htm

画像からメタ情報を取得

方法

<?php
	$size = GetImageSize("img/flag.jpg");
?>
<img src="img/flag.jpg" <?php echo $size[3]; ?> />


$size[3] の中身

width="120" height="40"

つまり

<img src="img/flag.jpg" width="120" height="40" />

連想配列をキーでソートして走査

サンプル

$fruits = array (
	"d"=>"lemon",
	"a"=>"orange",
	"b"=>"banana",
	"c"=>"apple"'
);
ksort ($fruits);
reset ($fruits);
while (list ($key, $val) = each ($fruits)) {
	echo "$key = $val\n";
}

出力

a = orange
b = banana
c = apple
d = lemon

Reference

PHP Manual - ksort

定数の使用法

定義方法

  define('NUM',12345); // 整数,浮動小数点の定義
  define('NKF_PATH','/usr/bin/nkf'); // 文字型の定義

使用上の注意 - echo

  ×
echo "nkfへのパスは = NKF_PATH";   // nkfへのパスは = NKF_PATH

  ○
echo "nkfへのパスは = ".NKF_PATH;  // nkfへのパスは = /usr/bin/nkf


使用上の注意 - exec

  ×
exec("NKF_PATH NKF_OPTION $import_file > $import_file_euc");

  ○
exec(NKF_PATH." ".NKF_OPTION." $import_file > $import_file_euc");

mb_ereg の未定義エラー

phpinfoを見ても

  --enable-mbstring 付き
  Multibyte (Japanese) Support もOK

原因

  --enable-mbregex 付きで configure されていない.

詳細

  --enable-mbstring
    mb_strlen()
    mb_strpos()
    mb_strrpos
    mb_substr()
  --enable-mbregex
    mb_ereg()
    mb_eregi()
    mb_ereg_replace()
    mb_eregi_replace()
    mb_split

現行の PHP4.3.3-1 の Debianパッケージのマルチバイト対応状況

  --enable-mbstring のみ付いている為,mb_str* しか使用できない.
  --enable-mbregex 付きで再コンパイルするしかない.

Reference

  [PHP-users 13906] Re: マルチバイト対応:mb_eregの未定義エラーについて
  http://ns1.php.gr.jp/pipermail/php-users/2003-March/014438.html

PHP の mysql_connect() で Call to undefined function

Summary

Call to undefined function: mysql_connect()
というエラーが発生する.

原因

/etc/php/apache/php.ini

;extension=mysql.so

extension=mysql.so が コメントアウトされていた.

対処法

  /etc/php/apache/php.ini を

extension=mysql.so

  と変更して

# apachectl stop
# apachectl start

  で apache 再起動

input type="checkbox"

ダメサンプル

<form method="GET" action="region.php">
	<input type="checkbox" name="region_code" value="01" />
	<input type="checkbox" name="region_code" value="02" />
	<input type="checkbox" name="region_code" value="03" />
</form>

$region_code という配列に入って欲しいのに入らない.

  最後の値が上書きされる.

良いサンプル

<form method="GET" action="region.php">
	<input type="checkbox" name="region_code[]" value="01" />
	<input type="checkbox" name="region_code[]" value="02" />
	<input type="checkbox" name="region_code[]" value="03" />
</form>

$region_code という配列に入ってくれる.

  name="hoge[]"
  がミソ

Reference

  [PHP-jp 2755] Re: Form のCHECKBOXの値について
  http://www.nishimoto-site.net/archiver/ML/php-ML/199912/msg00134.html

p2 - PHP でつくった 2ch Viewer

Summary

  ブラウザから 2ちゃんねる,まちBBS,JBBS@したらばBBS 等の掲示板を快適に閲覧するためのPHPスクリプト

NG ワードの設定

  NGワードは改行区切りで複数登録可
設定ファイル p2/data
正規表現 非対応
文字コード Shift-JIS
改行コード LF
- 名前に対するNGワード
  p2_ng_name.txt
  p2_aborn_name.txt

メールに対するNGワード

  p2_ng_mail.txt
  p2_aborn_mail.txt

メッセージに対するNGワード

  p2_ng_msg.txt
  p2_aborn_msg.txt

ID に対するNGワード

  p2_ng_id.txt
  p2_aborn_id.txt

ファイル名の違い

  NG ワード = p2_ng_*.txt
  あぼーんワード = p2_aborn_*.txt

NG ワードとあぼーんワードの相違点

  NG ワード : 見えなくしたということを打ち消し線でわかるようにしている.マウスオーバーで表示確認可能.
  あぼーんワード : 完全に見えなくする.いわゆる透明あぼーん状態

p2機能拡張パック に必要な PEAR パッケージ

Archive_Tar
Benchmark
Cache_Lite
File
PEAR
XML_Beautifier
XML_Parser
XML_RSS
XML_Tree
XML_Util

ホスト制限 - 「アク禁」と表示されてしまう場合.

  conf_hostcheck.php を編集する.
  
  外部リンクを通すゲートが moonshime だと自動転送されない
  conf_user.php を変更
$through_ime = "p2";


RSS リーダとして使用する

  p2機能拡張パックを利用する.
  PEAR の XML_RSS が必要.
  conf_user_ex.php を編集.

Reference

  p2 - PHPでつくった2ch Viewer
  http://akid.s17.xrea.com/
  SourceForge.jp - p2
  http://sourceforge.jp/projects/p2-php/
  p2Wiki
  http://akid.s17.xrea.com:8080/p2puki/pukiwiki.php
  p2機能拡張パック
  http://page2.xrea.jp/expack/

hoge.phps

ファイル名.phps にしてアクセスすると

  ソースが色づけされて表示される.

方法

  httpd.conf に以下を記述
  AddType application/x-httpd-php-source .phps

PHP で画像を扱う

必要なもの

  GD lib : http://www.boutell.com/gd/
  FreeType lib : http://freetype.sourceforge.net/
  libjpeg : ftp://ftp.uu.net/graphics/jpeg/
  - GD に必要
    libpng : http://www.libpng.org/pub/png/
    zlib : http://www.gzip.org/zlib/

PHP の再コンパイル

  configure 時に
  --with-gd=/path/to/gd
  --with-jpeg-dir=/path/to/libjpeg
  --with-zlib-dir=/path/to/zlib

サンプル

$img = ImageCreate($width, $height) or die ("Cannot Initialize new GD image stream");
$color_white = ImageColorAllocate($img, 255, 255, 255);
ImageFill($img, 0, 0, $color_white);


日本語を扱う - エンコードが必要

$string ="日本語";
$string = mb_convert_encoding($string,"UTF-8","EUC");
$color_black = ImageColorAllocate($img,   0,   0,   0);
ImageTTFText($img, $size, $angle, $x, $y, $color_black, "/usr/openwin/lib/locale/ja/X11/fonts/TT/HeiseiMin-W3H.ttf", $string);


Reference

  HotWired Japan : Webmonkey : backend : PHPとGDで画像を生成しちゃおう (第1回)
  http://www.hotwired.co.jp/webmonkey/2001/36/index4a.html
  HotWired Japan : Webmonkey : backend : PHPとGDで画像を生成しちゃおう (第2回)
  http://www.hotwired.co.jp/webmonkey/2001/37/index4a.html
  GD lib
  http://www.boutell.com/gd/
  FreeType lib
  http://freetype.sourceforge.net/
  libjpeg
  ftp://ftp.uu.net/graphics/jpeg/
  libpng
  http://www.libpng.org/pub/png/
  zlib
  http://www.gzip.org/zlib/