PHP PG
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* [[PHP PG]]
PHPのプログラムのTIPSです。
#contents
** TIPS
***コーディング規約
[[付録 B. Zend Framework PHP 標準コーディング規約>http://...
***ダブルクォーテーションとシングルクォーテーションの違い
ダブルクォーテーション 括弧内の変数は認識される。~
シングルクォーテーション 括弧内の変数は認識しない。~
***requireとincludeの違い
requireはスクリプト解析前に置き換えされ、includeはそのと...
***ログをとる
error_log("ログ",3,"/webroot/error.log");
を埋め込みます。
0:php.iniのerror_log参照
1:メール
2:他ホスト通知
3:ログファイル
***apacheにログをとる
apache_noteを使う。~
[[apacheのログに好きな情報を出す方法(PHP編)>http://neta...
*** 配列
-配列の中身の表示
for( $i=0; $i<count($hoge); $i++ ) {
echo "<p>".$hoge[$i];
}
-連想配列の場合
reset($hoge); //foreachが最初に戻してくれるので、わざわ...
foreach($hoge as $key => $val) {
echo "<p>".$key.":".$val;
}
-初期化
$hogearray = array();
*** ブラウザで中止しても続行させたい
php.iniに
ignore_user_abort = On
またmax_execution_timeを大きくしておきましょう
***mbstring
http://php.s3.to/man/ref.mbstring.html
***変数のデータ型
gettype($hoge);
もしくはis_array()とかで参照する。
***substr
他の言語をさわっているとよく間違える...
[[String 関数 - 文字列の一部分を返す>http://www.phppro.jp...
***文字列のバイト数
strlen(bin2hex($hoge))/2
mb_strwidthはなんかおかしいんだよな...
***fgetcsvで文字化け
使えそうで使えなかった... ので大変よくないやり方ですが、
//while ($data = fgetcsv($fp,2048)) {
while ($data1 = fgets($fp,2048)) {
$data1 = mb_convert_encoding($data1,"EUC-JP","SJIS");
$data = mb_split(",",str_replace('"','',$data1));
なんだこりゃ... ~
ということで、こちらを参照しましょう。
[[CSVの読み込み>http://project-p.jp/halt/kinowiki/php/Tip...
[[fgetcsv で文字化け、fgetcsv_reg を試す。>http://sfi.ham...
[[fgetcsv関数を使用した場合の文字化けについて>http://sabo...
[[PHP5でfgetcsvが正常に動作しない>http://yossy.iimp.jp/wp...
***チェックボックス
http://www.fukushi-net.or.jp/takamoto/php/checkbox/
***=&とは
$hoge1 =& $hoge2とかで使ってたりしますが、これはリファレ...
***日付
日付をフォーマットしたい場合に、
date("Y-m-d", strtotime("2007/02/10 22:40:00"));
[[日付フォーマット>http://php.benscom.com/manual/ja/funct...
***1年前
date("Y-m-d",mktime(0,0,0,date("m"),date("d"),date("Y")-...
1日前とか1ヶ月前も同じ要領で。こんなことしなくても、
date('Y-m-d', strtotime('-1 day'));
とか +3 weekで3週間後、-5 daysで5日前、-1 month で一ヶ月...
***strposの戻り値がintとboolean?
見つかった場合は見つかった文字の開始位置、見つからなかっ...
***==の比較がおかしい?
$a = "00001";
$b = "01";
if ($a == $b) {
//ここを通る
}
なんってこった....... ===かstrcmpを使います。
***HTTP_Request
これはHPの自動取得や自動POSTなどいろいろと応用がきくので...
$req =& new HTTP_Request("http://www.hoge.ho");
GET,POSTしたいURLを指定します。必要ならばヘッダを付加しま...
$req->addHeader("User_Agent","Mozilla/4.0 (compatible; M...
POSTの場合、変数と値をセットします。
$req->addPostData('koumoku','atai');
セットが終わったらリクエストを投げます。
$response = $req->sendRequest();
エラーかどうかを調べます。
if (PEAR::isError($response)) {
// エラー表示
echo "エラー:".$req->getResponseCode();
もしくは
$code = $req->getResponseCode();
で、そのレスポンスコードを確認します。404はNot Foundとか...
$nexturl = $req->getResponseHeader("Location");
で取得して、
$req->setURL($nexturl);
でURLをセットしておいて、もう一度
$response = $req->sendRequest();
とします。setURLでセットしたURLは
$req->_url->url
で参照可能です。エラーでないなら、
$body = $req->getResponseBody();
で取得したhtmlを$bodyに入れます。これを好きな形に加工しま...
もし取得したデータを一行一行処理したいなら、
$bodyline = mb_split("\n",$body);
foreach($bodyline as $linedata){
でグルグルまわします。他にもいろいろとありますので、ほん...
$cookies = $req->getResponseCookies();
で取得しておきます。このcookieを渡したい場合は、
foreach ($loginCookies as $cookie) {
$req->addCookie($cookie['name'], $cookie['value']);
}
でセットします。
***URL分解
parse_urlを使います。
$urlary = parse_url("http://hidekazu.dhs1.sst.ne.jp/puki...
で、
$urlary['scheme']; http
$urlary['host']; hidekazu.dhs1.sst.ne.jp
$urlary['path']; /pukiwiki/pukiwiki.php
他にport,user,pass,query,fragmentとかあります。
***正しいDNSかどうかをチェックしたい。
//@以降を$hostpartに入れる
if (!checkdnsrr($hostpart,"ANY")) {
//error
}
http://www.teu.ac.jp/chiit/~dsuzuki/phpdoc/function.check...
*** HTTPの環境変数取得
[[Perl・PHP・JavaでHTTP環境変数を取得する方法>http://iwam...
***非同期実行
system("/home/your/bgprog $arg1 $arg2 > /dev/null &");
動かない場合は、> test.logとかしてログを出すかパスが通っ...
set > path.log
とかして、確認しておこう。
***待ち
sleep(秒);
usleep(マイクロ秒);
***タイムアウト
set_time_limit(秒数)
セーフモードで実行されていると無効になるので、もしくはphp...
***戻るボタン
PHPで戻るボタンを押すとキャッシュの有効期限れといわれる場...
$utime = date( "U" ) + 60 * 60 * 24;
$expires = date( "D, d M Y H:i:s", $utime )." GMT";
header("Expires: {$expires}");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " ...
とすればいいらしいのですが、XOOPSでいまいちうまくいきませ...
header ('Content-Type:text/html; charset='._CHARSET);
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " ...
header('Cache-Control: no-store, no-cache, max-age=1, s-...
header("Pragma: no-cache");
の記述があり、このあたりだとは思うのですが...
とりあえずfirefoxで LiveHTTPHeadersをいれて覗いていると、...
Cache-Control: private, no-cache
だめなほうは、
Cache-Control: no-store, no-cache, must-revalidate, post...
となっている。
[[PHP/「ページの有効期限切れ」対策>http://www.glamenv-sep...
***ダウンロード
$len = filesize($file_name);
header("Content-type: application/force-download");
header("Content-Disposition: attachment ; filename=downl...
header("Content-Length: ". $len) ;
//ファイル出力(文字コード変換含む)
$kanji_code=mb_internal_encoding(); // 現在の内部文字コ...
mb_http_output("SJIS"); // HTTP文字コードをSJISに明示的...
readfile($file_name); // ファイルを読み込んでHTTP出力
mb_internal_encoding($kanji_code); // 内部文字コードを元...
//テンポラリファイルを削除
unlink($file_name);
***ディレクトリの中のファイルを削除
$dellpath = "/work";
$dir = opendir($dellpath);
while($file = readdir($dir)) {
if(is_file($dellpath."/$file")) {
unlink($dellpath."/$file");
}
}
closedir($dir);
***文字の長さ
マルチバイトの時に全角2バイト、半角1バイトとして計算した...
mb_strwidth($test) <--長さ
mb_strimwidth($test,0,40,''); <--40バイトで切る
***ファイルシステムに関する関数の戻り値がおかしい
キャッシュがきいているかもしれないので、clearstatcache()...
***配列の中身を確認したい。
print_r($ary);
***タグを消したい!
strip_tags
***スパム対策の画像を作りたい。
アンチスパム画像だと思っていたんですが、CAPTCHA(complete...
KCAPTCHAが一番見やすい画像でした。JpGraphも簡単でよかった...
参考:~
[[ランダムに生成される画像を利用してフォームの検証を行う>...
[[アンチスパム・イメージを使った認証>http://www.pahoo.org...
[[PHPで使えるCAPTCHA画像作成ライブラリまとめ:phpspot開発...
[[KCAPTCHA>http://goodphp.mirrors.phpclasses.org/browse/p...
***スパムがうざい
[[スパム防止に使えるPEARパッケージ「PEAR::Net_DNSBL」>htt...
***PDF
PHPからPDFを生成したい場合、TCPDFというものがあります。た...
php4でやってみます。
wget http://downloads.sourceforge.net/tcpdf/tcpdf_4_0_02...
unzip tcpdf_4_0_027_php4.zip
mv tcpdf_php4 /usr/local/lib/php
/usr/local/lib/phpはphp.iniのincludeのところ
cd /usr/local/lib/php/tcpdf_php4/fonts/utils/src/ttf2ufm...
make all
ん?エラーが...
scripts/unhtml <FONTS.hpux.html >FONTS.hpux
/bin/sh: scripts/unhtml: 許可がありません
とりあえず、
chmod -R 777 /usr/local/lib/php/tcpdf_php4/fonts/utils/s...
make all
make install
これでttf2pt1がつかえる。
wget http://ossipedia.ipa.go.jp/ipafont/IPAfont00203.php
unzip IPAfont00203.zip
cd IPAfont00203
ttf2pt1 -a -F ipag.ttf
/usr/local/lib/php/tcpdf_php4/fonts/utils/makefont.php i...
cp ipag.php /usr/local/lib/php/tcpdf_php4/fonts/ipagot...
cp ipag.ctg.z /usr/local/lib/php/tcpdf_php4/fonts/
cp ipag.z /usr/local/lib/php/tcpdf_php4/fonts/
なんか重いな...
参考:~
[[TCPDF>http://www.tecnick.com/public/code/cp_dpage.php?a...
[[TCPDFで日本語を使うサンプル>http://hrgs.xrea.jp/2006/08...
[[TCPDF 日本語化について>http://www.bluemooninc.biz/~xoop...
[[PHPでPDF生成>http://d.hatena.ne.jp/yukiwata/20080205/12...
[[【PDF処理 -- PHP】 FPDF v1.6 + FPDI 日本語利用詳細>http...
[[PHP + TCPDF + FPDI + FPDI_Template>http://makisuke.sees...
オーバーレイぽく使えるかも。
では[[FPDF>http://www.fpdf.org/]]を見てみましょう
http://www.fpdf.org/en/dl.php?id=99にドキュメントがありま...
fpdf16.zipをダウンロードしました。
unzip fpdf16.zip
mkdir /usr/local/lib/php/pdf
cp fpdf.php /usr/local/lib/php/pdf/
cp -rf font /usr/local/lib/php/pdf/
wget http://www.fpdf.org/download/japanese.zip
unzip japanese.zip
cp japanese.php /usr/local/lib/php/pdf
japanese.phpを修正します。
function AddSJISFont($family='SJIS')の
$name='KozMinPro-Regular-Acro';
を
$name='MSGothic';
では、動かしてみましょう。
<?php
require('pdf/japanese.php');
define(SC_CHAR, "EUC-JP");
$pdf = new PDF_Japanese();
$pdf->AddSJISFont();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('SJIS', '', 9);
$pdf->Text(0, 10, sjis_conv("テスト"));
$pdf->Output();
function sjis_conv($conv_str) {
return (mb_convert_encoding($conv_str, "SJIS", SC_CHAR...
}
?>
あら?
FPDF error: mbstring overloading must be disabled
php.iniを見ると、
mbstring.func_overload = 7
になっている。0にすれば出力されました。.htaccessに
php_value mbstring.func_overload 0
とでもしておくか。
ん?windowsではゴシックでmacでは明朝になった...
次は、FPDIです。既存のPDFをテンプレートとして、そのPDFに...
ではhttp://www.setasign.de/products/pdf-php-solutions/fpd...
FPDI-1.2.1.zip
FPDF_TPL-1.1.2.zip
両方解凍後、
cp -rf * /usr/local/lib/php/pdf/
次にjapanese.phpを修正します。
require('fpdf.php');
の下に
require('fpdi.php');
を追加
class PDF_Japanese extends FPDF
を//でコメントして、
class PDF_Japanese extends FPDI
を追加。
ではテンプレートのファイルをtmp.pdfとして、そのPGのある場...
<?php
require('pdf/japanese.php');
define(SC_CHAR, "EUC-JP");
define(TMPL_PDF, "tmp.pdf");
$pdf = new PDF_Japanese();
$pdf->AddSJISFont();
$pdf->Open();
$pageno = $pdf->setSourceFile(TMPL_PDF);
$tplidx = $pdf->ImportPage(1);
$pdf->AddPage();
$pdf->SetFont('SJIS', '', 9);
$pdf->useTemplate($tplidx);
$pdf->Text(0, 10, sjis_conv("テスト1"));
$pdf->SetFont('SJIS', '', 30);
$pdf->Text(30, 100, sjis_conv("テスト2"));
$pdf->SetFont('SJIS', '', 20);
$pdf->Text(50, 50, sjis_conv("テスト3"));
$pdf->Output();
function sjis_conv($conv_str) {
return (mb_convert_encoding($conv_str, "SJIS", SC_CHAR...
}
?>
では今度はjapanese.zipではなく、[[mbfpdf10b.zip>http://ww...
解凍後、
cp -rf * /usr/local/lib/php/pdf/
で、
<?php
require_once 'pdf/mbfpdf.php';
$GLOBALS['EUC2SJIS'] = true;
$pdf=new MBFPDF('P', 'mm', 'A4');
$pdf->AddMBFont(GOTHIC ,'SJIS');
$pdf->AddPage();
$pdf->SetFont(GOTHIC,'',20);
$pdf->Write(10,"サンプル文字列");
$pdf->Output();
?>
ではこちらもFPDIに対応させましょう。MBfpdi.phpを開いて
require('fpdf.php');
の下に
require('fpdi.php');
を追加、また
class MBFPDF extends FPDF
を
class MBFPDF extends fpdi
に変更します。
<?php
require_once 'pdf/mbfpdf.php';
$GLOBALS['EUC2SJIS'] = true;
define("SC_CHAR", "EUC-JP");
define("TMPL_PDF", "tmp.pdf");
$pdf=new MBFPDF('P', 'mm', 'A4');
$pdf->AddMBFont(GOTHIC ,'SJIS');
$pdf->Open();
$pageno = $pdf->setSourceFile(TMPL_PDF);
$tplidx = $pdf->ImportPage(1);
$pdf->AddPage();
$pdf->SetFont(GOTHIC, '', 9);
$pdf->useTemplate($tplidx);
$pdf->Text(0, 10, sjis_conv("テスト1"));
$pdf->SetFont(GOTHIC, '', 30);
$pdf->Text(30, 100, sjis_conv("テスト2"));
$pdf->SetFont(GOTHIC, '', 20);
$pdf->Text(50, 50, sjis_conv("テスト3"));
$pdf->Output();
function sjis_conv($conv_str) {
return (mb_convert_encoding($conv_str, "SJIS", SC_CHAR));
}
?>
参考:~
[[FPDFを使ったPDF作成>http://www.phpbook.jp/fpdf/]]~
[[PHP:PDF帳票(FPDF+FPDI+文字回転)>http://shikabo.ddo.j...
[[PDF関連情報>http://www.geocities.jp/rui_hirokawa/php/pd...
***QR
http://blog.webcreativepark.net/2007/09/17-194842.html
***MySQLへの複数接続
$dbsaki = mysql_connect("host","user","pass");
//これがいる
mysql_select_db("dbname", $dbsaki);
//クエリ
$sql = "select ....";
mysql_query($sql,$dbsaki);
参考:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1447277
***MySQLのAUTO_INCREMENTで生成された値を取得したい。
mysql_insert_id()
***カンマ編集、ゼロサプレス(ゼロパディング)
number_format
sprintf("%03d", $hoge);
***邪魔な文字を消したい。
たとえば数値アルファベット以外を消したい場合は、
$hoge = ereg_replace("[^a-zA-Z0-9]", "", $hoge);
***文中のURLをリンクへ,メールアドレスをmaillto
$kkbody = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[...
$match = '[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+'
.'@[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+\.'
.'(com|net|org|gov|edu|int|mil|biz|info|name|pro|...
$kkbody = ereg_replace($match,"<a href='mailto:\\0'>\\0<...
***文字列折り返し
マルチバイトの2バイト目とか考えるの面倒なときは、mb_strcu...
***デーモンを作る
[[【PHP TIPS】 57. PEAR::Net_Serverでサーバデーモンを作ろ...
[[1.7 プログラムをデーモンとして動かすにはどうすればいい...
***GDを使って画像加工したい
[[PHP GDプログラミング>http://www.geekpage.jp/web/php-gd/]]
***画像保存
<?php
$temp=file_get_contents("http://www.google.co.jp/intl/ja...
$handle=fopen("test.gif","w");
fwrite($handle,$temp);
fclose($handle);
?>
***画像合成
<?php
// 1枚目
$im1 = ImageCreateFromJpeg("a.jpg");
// 合成したいファイル
$im2 = ImageCreateFromGif("b.gif");
// 合成
ImageCopy($im1, $im2, 470, 400, 0, 0, 169, 85);
// 保存 書き込めないときは権限を見直しましょう
Imagejpeg($im1,"/hoge/c.jpg");
// 破棄
ImageDestory($im1);
ImageDestory($im2);
?>
***出力バッファ
ob_flushとflushの違いを理解しよう。
[[出力バッファ制御>http://www.y2sunlight.com/water/webman...
** リンク
***[[Windows機種依存文字の解消>http://www.kauda.jp/~sugur...
機種依存文字の解消のサンプルを提供していただいております。
***[[レッツPHP! Webメーラ>http://php.s3.to/net/#mail]]
Webメーラーのサンプルがあります。
***[[PHP 基礎編9 - 正規表現、マッチ、置き換え、ereg、ereg...
***[[セキュアな PHP アプリケーションを作成するための 7 つ...
***[[PHP でオブジェクト指向の設計をするための 7 つの良い...
** 参考書籍
** コメント
--#comment
終了行:
* [[PHP PG]]
PHPのプログラムのTIPSです。
#contents
** TIPS
***コーディング規約
[[付録 B. Zend Framework PHP 標準コーディング規約>http://...
***ダブルクォーテーションとシングルクォーテーションの違い
ダブルクォーテーション 括弧内の変数は認識される。~
シングルクォーテーション 括弧内の変数は認識しない。~
***requireとincludeの違い
requireはスクリプト解析前に置き換えされ、includeはそのと...
***ログをとる
error_log("ログ",3,"/webroot/error.log");
を埋め込みます。
0:php.iniのerror_log参照
1:メール
2:他ホスト通知
3:ログファイル
***apacheにログをとる
apache_noteを使う。~
[[apacheのログに好きな情報を出す方法(PHP編)>http://neta...
*** 配列
-配列の中身の表示
for( $i=0; $i<count($hoge); $i++ ) {
echo "<p>".$hoge[$i];
}
-連想配列の場合
reset($hoge); //foreachが最初に戻してくれるので、わざわ...
foreach($hoge as $key => $val) {
echo "<p>".$key.":".$val;
}
-初期化
$hogearray = array();
*** ブラウザで中止しても続行させたい
php.iniに
ignore_user_abort = On
またmax_execution_timeを大きくしておきましょう
***mbstring
http://php.s3.to/man/ref.mbstring.html
***変数のデータ型
gettype($hoge);
もしくはis_array()とかで参照する。
***substr
他の言語をさわっているとよく間違える...
[[String 関数 - 文字列の一部分を返す>http://www.phppro.jp...
***文字列のバイト数
strlen(bin2hex($hoge))/2
mb_strwidthはなんかおかしいんだよな...
***fgetcsvで文字化け
使えそうで使えなかった... ので大変よくないやり方ですが、
//while ($data = fgetcsv($fp,2048)) {
while ($data1 = fgets($fp,2048)) {
$data1 = mb_convert_encoding($data1,"EUC-JP","SJIS");
$data = mb_split(",",str_replace('"','',$data1));
なんだこりゃ... ~
ということで、こちらを参照しましょう。
[[CSVの読み込み>http://project-p.jp/halt/kinowiki/php/Tip...
[[fgetcsv で文字化け、fgetcsv_reg を試す。>http://sfi.ham...
[[fgetcsv関数を使用した場合の文字化けについて>http://sabo...
[[PHP5でfgetcsvが正常に動作しない>http://yossy.iimp.jp/wp...
***チェックボックス
http://www.fukushi-net.or.jp/takamoto/php/checkbox/
***=&とは
$hoge1 =& $hoge2とかで使ってたりしますが、これはリファレ...
***日付
日付をフォーマットしたい場合に、
date("Y-m-d", strtotime("2007/02/10 22:40:00"));
[[日付フォーマット>http://php.benscom.com/manual/ja/funct...
***1年前
date("Y-m-d",mktime(0,0,0,date("m"),date("d"),date("Y")-...
1日前とか1ヶ月前も同じ要領で。こんなことしなくても、
date('Y-m-d', strtotime('-1 day'));
とか +3 weekで3週間後、-5 daysで5日前、-1 month で一ヶ月...
***strposの戻り値がintとboolean?
見つかった場合は見つかった文字の開始位置、見つからなかっ...
***==の比較がおかしい?
$a = "00001";
$b = "01";
if ($a == $b) {
//ここを通る
}
なんってこった....... ===かstrcmpを使います。
***HTTP_Request
これはHPの自動取得や自動POSTなどいろいろと応用がきくので...
$req =& new HTTP_Request("http://www.hoge.ho");
GET,POSTしたいURLを指定します。必要ならばヘッダを付加しま...
$req->addHeader("User_Agent","Mozilla/4.0 (compatible; M...
POSTの場合、変数と値をセットします。
$req->addPostData('koumoku','atai');
セットが終わったらリクエストを投げます。
$response = $req->sendRequest();
エラーかどうかを調べます。
if (PEAR::isError($response)) {
// エラー表示
echo "エラー:".$req->getResponseCode();
もしくは
$code = $req->getResponseCode();
で、そのレスポンスコードを確認します。404はNot Foundとか...
$nexturl = $req->getResponseHeader("Location");
で取得して、
$req->setURL($nexturl);
でURLをセットしておいて、もう一度
$response = $req->sendRequest();
とします。setURLでセットしたURLは
$req->_url->url
で参照可能です。エラーでないなら、
$body = $req->getResponseBody();
で取得したhtmlを$bodyに入れます。これを好きな形に加工しま...
もし取得したデータを一行一行処理したいなら、
$bodyline = mb_split("\n",$body);
foreach($bodyline as $linedata){
でグルグルまわします。他にもいろいろとありますので、ほん...
$cookies = $req->getResponseCookies();
で取得しておきます。このcookieを渡したい場合は、
foreach ($loginCookies as $cookie) {
$req->addCookie($cookie['name'], $cookie['value']);
}
でセットします。
***URL分解
parse_urlを使います。
$urlary = parse_url("http://hidekazu.dhs1.sst.ne.jp/puki...
で、
$urlary['scheme']; http
$urlary['host']; hidekazu.dhs1.sst.ne.jp
$urlary['path']; /pukiwiki/pukiwiki.php
他にport,user,pass,query,fragmentとかあります。
***正しいDNSかどうかをチェックしたい。
//@以降を$hostpartに入れる
if (!checkdnsrr($hostpart,"ANY")) {
//error
}
http://www.teu.ac.jp/chiit/~dsuzuki/phpdoc/function.check...
*** HTTPの環境変数取得
[[Perl・PHP・JavaでHTTP環境変数を取得する方法>http://iwam...
***非同期実行
system("/home/your/bgprog $arg1 $arg2 > /dev/null &");
動かない場合は、> test.logとかしてログを出すかパスが通っ...
set > path.log
とかして、確認しておこう。
***待ち
sleep(秒);
usleep(マイクロ秒);
***タイムアウト
set_time_limit(秒数)
セーフモードで実行されていると無効になるので、もしくはphp...
***戻るボタン
PHPで戻るボタンを押すとキャッシュの有効期限れといわれる場...
$utime = date( "U" ) + 60 * 60 * 24;
$expires = date( "D, d M Y H:i:s", $utime )." GMT";
header("Expires: {$expires}");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " ...
とすればいいらしいのですが、XOOPSでいまいちうまくいきませ...
header ('Content-Type:text/html; charset='._CHARSET);
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " ...
header('Cache-Control: no-store, no-cache, max-age=1, s-...
header("Pragma: no-cache");
の記述があり、このあたりだとは思うのですが...
とりあえずfirefoxで LiveHTTPHeadersをいれて覗いていると、...
Cache-Control: private, no-cache
だめなほうは、
Cache-Control: no-store, no-cache, must-revalidate, post...
となっている。
[[PHP/「ページの有効期限切れ」対策>http://www.glamenv-sep...
***ダウンロード
$len = filesize($file_name);
header("Content-type: application/force-download");
header("Content-Disposition: attachment ; filename=downl...
header("Content-Length: ". $len) ;
//ファイル出力(文字コード変換含む)
$kanji_code=mb_internal_encoding(); // 現在の内部文字コ...
mb_http_output("SJIS"); // HTTP文字コードをSJISに明示的...
readfile($file_name); // ファイルを読み込んでHTTP出力
mb_internal_encoding($kanji_code); // 内部文字コードを元...
//テンポラリファイルを削除
unlink($file_name);
***ディレクトリの中のファイルを削除
$dellpath = "/work";
$dir = opendir($dellpath);
while($file = readdir($dir)) {
if(is_file($dellpath."/$file")) {
unlink($dellpath."/$file");
}
}
closedir($dir);
***文字の長さ
マルチバイトの時に全角2バイト、半角1バイトとして計算した...
mb_strwidth($test) <--長さ
mb_strimwidth($test,0,40,''); <--40バイトで切る
***ファイルシステムに関する関数の戻り値がおかしい
キャッシュがきいているかもしれないので、clearstatcache()...
***配列の中身を確認したい。
print_r($ary);
***タグを消したい!
strip_tags
***スパム対策の画像を作りたい。
アンチスパム画像だと思っていたんですが、CAPTCHA(complete...
KCAPTCHAが一番見やすい画像でした。JpGraphも簡単でよかった...
参考:~
[[ランダムに生成される画像を利用してフォームの検証を行う>...
[[アンチスパム・イメージを使った認証>http://www.pahoo.org...
[[PHPで使えるCAPTCHA画像作成ライブラリまとめ:phpspot開発...
[[KCAPTCHA>http://goodphp.mirrors.phpclasses.org/browse/p...
***スパムがうざい
[[スパム防止に使えるPEARパッケージ「PEAR::Net_DNSBL」>htt...
***PDF
PHPからPDFを生成したい場合、TCPDFというものがあります。た...
php4でやってみます。
wget http://downloads.sourceforge.net/tcpdf/tcpdf_4_0_02...
unzip tcpdf_4_0_027_php4.zip
mv tcpdf_php4 /usr/local/lib/php
/usr/local/lib/phpはphp.iniのincludeのところ
cd /usr/local/lib/php/tcpdf_php4/fonts/utils/src/ttf2ufm...
make all
ん?エラーが...
scripts/unhtml <FONTS.hpux.html >FONTS.hpux
/bin/sh: scripts/unhtml: 許可がありません
とりあえず、
chmod -R 777 /usr/local/lib/php/tcpdf_php4/fonts/utils/s...
make all
make install
これでttf2pt1がつかえる。
wget http://ossipedia.ipa.go.jp/ipafont/IPAfont00203.php
unzip IPAfont00203.zip
cd IPAfont00203
ttf2pt1 -a -F ipag.ttf
/usr/local/lib/php/tcpdf_php4/fonts/utils/makefont.php i...
cp ipag.php /usr/local/lib/php/tcpdf_php4/fonts/ipagot...
cp ipag.ctg.z /usr/local/lib/php/tcpdf_php4/fonts/
cp ipag.z /usr/local/lib/php/tcpdf_php4/fonts/
なんか重いな...
参考:~
[[TCPDF>http://www.tecnick.com/public/code/cp_dpage.php?a...
[[TCPDFで日本語を使うサンプル>http://hrgs.xrea.jp/2006/08...
[[TCPDF 日本語化について>http://www.bluemooninc.biz/~xoop...
[[PHPでPDF生成>http://d.hatena.ne.jp/yukiwata/20080205/12...
[[【PDF処理 -- PHP】 FPDF v1.6 + FPDI 日本語利用詳細>http...
[[PHP + TCPDF + FPDI + FPDI_Template>http://makisuke.sees...
オーバーレイぽく使えるかも。
では[[FPDF>http://www.fpdf.org/]]を見てみましょう
http://www.fpdf.org/en/dl.php?id=99にドキュメントがありま...
fpdf16.zipをダウンロードしました。
unzip fpdf16.zip
mkdir /usr/local/lib/php/pdf
cp fpdf.php /usr/local/lib/php/pdf/
cp -rf font /usr/local/lib/php/pdf/
wget http://www.fpdf.org/download/japanese.zip
unzip japanese.zip
cp japanese.php /usr/local/lib/php/pdf
japanese.phpを修正します。
function AddSJISFont($family='SJIS')の
$name='KozMinPro-Regular-Acro';
を
$name='MSGothic';
では、動かしてみましょう。
<?php
require('pdf/japanese.php');
define(SC_CHAR, "EUC-JP");
$pdf = new PDF_Japanese();
$pdf->AddSJISFont();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('SJIS', '', 9);
$pdf->Text(0, 10, sjis_conv("テスト"));
$pdf->Output();
function sjis_conv($conv_str) {
return (mb_convert_encoding($conv_str, "SJIS", SC_CHAR...
}
?>
あら?
FPDF error: mbstring overloading must be disabled
php.iniを見ると、
mbstring.func_overload = 7
になっている。0にすれば出力されました。.htaccessに
php_value mbstring.func_overload 0
とでもしておくか。
ん?windowsではゴシックでmacでは明朝になった...
次は、FPDIです。既存のPDFをテンプレートとして、そのPDFに...
ではhttp://www.setasign.de/products/pdf-php-solutions/fpd...
FPDI-1.2.1.zip
FPDF_TPL-1.1.2.zip
両方解凍後、
cp -rf * /usr/local/lib/php/pdf/
次にjapanese.phpを修正します。
require('fpdf.php');
の下に
require('fpdi.php');
を追加
class PDF_Japanese extends FPDF
を//でコメントして、
class PDF_Japanese extends FPDI
を追加。
ではテンプレートのファイルをtmp.pdfとして、そのPGのある場...
<?php
require('pdf/japanese.php');
define(SC_CHAR, "EUC-JP");
define(TMPL_PDF, "tmp.pdf");
$pdf = new PDF_Japanese();
$pdf->AddSJISFont();
$pdf->Open();
$pageno = $pdf->setSourceFile(TMPL_PDF);
$tplidx = $pdf->ImportPage(1);
$pdf->AddPage();
$pdf->SetFont('SJIS', '', 9);
$pdf->useTemplate($tplidx);
$pdf->Text(0, 10, sjis_conv("テスト1"));
$pdf->SetFont('SJIS', '', 30);
$pdf->Text(30, 100, sjis_conv("テスト2"));
$pdf->SetFont('SJIS', '', 20);
$pdf->Text(50, 50, sjis_conv("テスト3"));
$pdf->Output();
function sjis_conv($conv_str) {
return (mb_convert_encoding($conv_str, "SJIS", SC_CHAR...
}
?>
では今度はjapanese.zipではなく、[[mbfpdf10b.zip>http://ww...
解凍後、
cp -rf * /usr/local/lib/php/pdf/
で、
<?php
require_once 'pdf/mbfpdf.php';
$GLOBALS['EUC2SJIS'] = true;
$pdf=new MBFPDF('P', 'mm', 'A4');
$pdf->AddMBFont(GOTHIC ,'SJIS');
$pdf->AddPage();
$pdf->SetFont(GOTHIC,'',20);
$pdf->Write(10,"サンプル文字列");
$pdf->Output();
?>
ではこちらもFPDIに対応させましょう。MBfpdi.phpを開いて
require('fpdf.php');
の下に
require('fpdi.php');
を追加、また
class MBFPDF extends FPDF
を
class MBFPDF extends fpdi
に変更します。
<?php
require_once 'pdf/mbfpdf.php';
$GLOBALS['EUC2SJIS'] = true;
define("SC_CHAR", "EUC-JP");
define("TMPL_PDF", "tmp.pdf");
$pdf=new MBFPDF('P', 'mm', 'A4');
$pdf->AddMBFont(GOTHIC ,'SJIS');
$pdf->Open();
$pageno = $pdf->setSourceFile(TMPL_PDF);
$tplidx = $pdf->ImportPage(1);
$pdf->AddPage();
$pdf->SetFont(GOTHIC, '', 9);
$pdf->useTemplate($tplidx);
$pdf->Text(0, 10, sjis_conv("テスト1"));
$pdf->SetFont(GOTHIC, '', 30);
$pdf->Text(30, 100, sjis_conv("テスト2"));
$pdf->SetFont(GOTHIC, '', 20);
$pdf->Text(50, 50, sjis_conv("テスト3"));
$pdf->Output();
function sjis_conv($conv_str) {
return (mb_convert_encoding($conv_str, "SJIS", SC_CHAR));
}
?>
参考:~
[[FPDFを使ったPDF作成>http://www.phpbook.jp/fpdf/]]~
[[PHP:PDF帳票(FPDF+FPDI+文字回転)>http://shikabo.ddo.j...
[[PDF関連情報>http://www.geocities.jp/rui_hirokawa/php/pd...
***QR
http://blog.webcreativepark.net/2007/09/17-194842.html
***MySQLへの複数接続
$dbsaki = mysql_connect("host","user","pass");
//これがいる
mysql_select_db("dbname", $dbsaki);
//クエリ
$sql = "select ....";
mysql_query($sql,$dbsaki);
参考:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1447277
***MySQLのAUTO_INCREMENTで生成された値を取得したい。
mysql_insert_id()
***カンマ編集、ゼロサプレス(ゼロパディング)
number_format
sprintf("%03d", $hoge);
***邪魔な文字を消したい。
たとえば数値アルファベット以外を消したい場合は、
$hoge = ereg_replace("[^a-zA-Z0-9]", "", $hoge);
***文中のURLをリンクへ,メールアドレスをmaillto
$kkbody = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[...
$match = '[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+'
.'@[0-9,A-Z,a-z][0-9,a-z,A-Z,_,\.,-]+\.'
.'(com|net|org|gov|edu|int|mil|biz|info|name|pro|...
$kkbody = ereg_replace($match,"<a href='mailto:\\0'>\\0<...
***文字列折り返し
マルチバイトの2バイト目とか考えるの面倒なときは、mb_strcu...
***デーモンを作る
[[【PHP TIPS】 57. PEAR::Net_Serverでサーバデーモンを作ろ...
[[1.7 プログラムをデーモンとして動かすにはどうすればいい...
***GDを使って画像加工したい
[[PHP GDプログラミング>http://www.geekpage.jp/web/php-gd/]]
***画像保存
<?php
$temp=file_get_contents("http://www.google.co.jp/intl/ja...
$handle=fopen("test.gif","w");
fwrite($handle,$temp);
fclose($handle);
?>
***画像合成
<?php
// 1枚目
$im1 = ImageCreateFromJpeg("a.jpg");
// 合成したいファイル
$im2 = ImageCreateFromGif("b.gif");
// 合成
ImageCopy($im1, $im2, 470, 400, 0, 0, 169, 85);
// 保存 書き込めないときは権限を見直しましょう
Imagejpeg($im1,"/hoge/c.jpg");
// 破棄
ImageDestory($im1);
ImageDestory($im2);
?>
***出力バッファ
ob_flushとflushの違いを理解しよう。
[[出力バッファ制御>http://www.y2sunlight.com/water/webman...
** リンク
***[[Windows機種依存文字の解消>http://www.kauda.jp/~sugur...
機種依存文字の解消のサンプルを提供していただいております。
***[[レッツPHP! Webメーラ>http://php.s3.to/net/#mail]]
Webメーラーのサンプルがあります。
***[[PHP 基礎編9 - 正規表現、マッチ、置き換え、ereg、ereg...
***[[セキュアな PHP アプリケーションを作成するための 7 つ...
***[[PHP でオブジェクト指向の設計をするための 7 つの良い...
** 参考書籍
** コメント
--#comment
ページ名: