FPDF/Output
Output
string Output([string name [, string dest]])
name
ファイルの名前
dest
ドキュメントを送信する送信先。 以下のうちのひとつを指定します。
I:ブラウザにインラインにて送信します。存在すればプラグインが利用されます。
D: 指定された名前で強制的にダウンロード。
F: 指定された名前で保存
S: PDFドキュメントを文字列として返します。 name パラメータは無視されます。
TOPへ
FPDF/インストール
FPDFのインストール
http://www.fpdf.org/
よりFPDFの最新版をダウンロード
http://www.setasign.de/products/pdf-php-solutions/fpdi/downloads/
よりPDFテンプレートを読み込むためのFPDIをダウンロード
http://www.geocities.jp/rui_hirokawa/php/pdf/
からMBFPDF 1.0bをダウンロード(日本語対応)
とパッチファイル(mbfpdfi102.patch.gz)をダウンロード
このパッチは、以下のように適用します。
$ cp fpdf/mbfpdf.php fpdf/MBfpdi.php
$ gzip -cd mbfpdi102.patch.gz | patch -p0
とあるので一旦
FPDFとFPDIとMBFPDFとmbfpdfi102.patch.gzをひとつのフォルダにまとめて
サーバにアップロードしtelnetでサーバにつないで
telnetから実行する。
作成された、MBfpdi.phpをfpdi.phpの代わりに使用する。
http://fpdf.japansite.net/
TOPへ
FPDF/サンプル
<?php
$myStr="あいうえおかきくけこあいうえおかきくけこあいうえおかきくけこあいうえおかきくけこ★。あいうえおかきくけこあいうえおかきくけこ1うえおかきくけこあいうえおかきくけこ★。";
require('fpdf153/MBfpdi.php');
$GLOBALS['EUC2SJIS'] = true;
$pdf=& new MBfpdi('L','mm','A4');
$pagecount = $pdf->setSourceFile("orig.pdf");
$tplidx = $pdf->ImportPage(1);
$pdf->addPage();
$s = $pdf->useTemplate($tplidx,0,0,297,210);
$pdf->SetY(10);
//$pdf->AddMBFont(KOZMIN ,'SJIS');
$pdf->AddMBFont(KOZGO ,'SJIS');
//$style="B" ;
$style="";
$font_size="8.5";
$pdf->SetFont(KOZGO,$style,$font_size) ;
$imageFile='test.jpg';
$targetW=128;
$targetH=126;
$newFile='test2.jpg';
$pdf->SetXY((297/2)-120, 150);
$pdf->MultiCell(115, 4, $myStr,0,"J");
$pdf->Output("new.pdf","F");
?>
TOPへ
JPEG/画像のサイズを調べる
$imageFile='test.jpg';
$imgA = imagecreatefromjpeg($imageFile);
$width=imagesx($imgA);
$height=imagesy($imgA);
imagedestroy($imgA);
TOPへ
String/\の重複を修正する。
■\の重複を修正する。
$_GET[name]が\500ならprintすると\\500になるので
$data=stripslashes($_GET[name])とすると\\が解除される。
get_magic_quotes_gpcがONなら\\と重複する。
if (get_magic_quotes_gpc){
$data=stripslashes($_GET[name]);
}else{
$data=$_GET[name];
}
TOPへ
String/sprintfフォーマットする
$test = sprintf("%04d", 10);
print $test;
結果は0010
%04d
で0を4つ使って埋める、dは10進数の文字
ということです。
$money = 123.1;
$formatted = sprintf ("%01.2f", $money);
// echo $formatted は "123.10"を出力します
これは"%01.2f"
0ひとつ使って埋める
小数点以下は2桁分0で埋めるということでしょうか
sprintf("%02.0f",1);
で"01"と2桁の文字列を出力します。
% - パーセント文字。引数は不要です。
b - 引数を整数として扱い、バイナリの数値 として表現します。
c - 引数を整数として扱い、その ASCII 値 の文字として表現します。
d - 引数を整数として扱い、10 進数として 表現します。
u - 引数を整数として扱い、符号無しの10進 数として表現します。
f - 引数を double として扱い、浮動小数点数 として表現します。
o - 引数を整数として扱い、8 進数として 表現します。
s - 引数を文字列として扱い、表現します。
x - 引数を整数として扱い、16 進数として (小文字で)表現します。
X - 引数を整数として扱い、16 進数として (大文字で)表現します。
TOPへ
String/substr
substr($Str,0,7);
123456789なら
1234567が返る
20060908を取り出すには
$Str="20060908";
$year=substr($Str,0,4);
$month=substr($Str,4,2);
$date=substr($Str,6,2);
になる。
TOPへ
date/date
date(Y)年4ケタ
date(n)月
date(m)月2ケタ
date(j)日
date(d)日2ケタ
date(H)時
date(i)分
a :午前または午後(小文字) am or pm
A :午前または午後(大文字) AM or PM
B :Swatch Internet time 000 から 999
d :日。二桁の数字(先頭にゼロがつく場合も) 01 から 31
D :曜日。3文字のテキスト形式。 Mon から Sun
F :月。フルスペルの文字。 January から December
g :時。12時間単位。先頭にゼロを付けない。 1 から 12
G :時。24時間単位。先頭にゼロを付けない。 0 から 23
h :時。数字。12 時間単位。 01 から 12
H :時。数字。24 時間単位。 00 から 23
i :分。先頭にゼロをつける。 00 to 59
I :(大文字の i) サマータイム制か否か 1ならサマータイム制。 0ならそうではない。
j :日。先頭にゼロをつけない。 1 から 31
l :(小文字の 'L') 曜日。フルスペル形式。 Sunday から Saturday
L :閏年であるかどうかを表す論理値。 1なら閏年。0なら閏年ではない。
m :月。数字。先頭にゼロをつける。 01 から 12
M :月。3文字形式。 Jan から Dec
n :月。数字。先頭にゼロをつけない。 1 から 12
O :グリニッジ標準時(GMT)との時間差 Example: +0200
r :RFC 822 フォーマットされた日付 Example: Thu, 21 Dec 2000 16:01:07 +0200
s :秒。先頭にゼロをつける。 00 から 59
S :英語形式の序数を表すサフィックス。2 文字。 st, nd, rd or th. Works well with j
t :指定した月の日数。 28 から 31
T :このマシーンのタイムゾーンの設定。 Examples: EST, MDT ...
U :Unix 時(1970年1月1日0時0分0秒)からの秒数 See also time()
w: 曜日。数値。 0 (日曜)から 6 (土曜)
W ISO-8601 月曜日に始まる年単位の週番号 (PHP 4.1.0で追加) Example: 42 (the 42nd week in the year)
Y :年。4 桁の数字。 Examples: 1999 or 2003
y :年。2 桁の数字。 Examples: 99 or 03
z :年間の通算日。数字。 0 から 366
Z :タイムゾーンのオフセット秒数。 UTCの西側のタイムゾーン用のオフセットは常に負です。そして、 UTCの東側のオフセットは常に正です。
TOPへ
date/getdate
$myTime=time();
$ARY = getdate($myTime);
配列が戻り値
[seconds] => 40
[minutes] => 58
[hours] => 21
[mday] => 17
[wday] => 2
[mon] => 6
[year] => 2003
[yday] => 167
[weekday] => Tuesday
[month] => June
[0] => 1055901520
TOPへ
date/mktime
$myTime=mktime(22,45,5,7,5,2004);
時,分,秒,月,日,年
UNIXタイムスタンプを返す
TOPへ
date/その年の祝日をかえす
function GETHOLIDAY($year){
###############ここから###############
#★★★★★日の決まった祝日★★★★★★★★★★★★★★★★★★★
$HOLARY = array('test','','','0101','0211','0429','0503','0505','1103','1123','1223');
#★★★★★春分・秋分日を計算(1980-2099まで有効)★★★★★★★★★
$dirY = 1980;
$syunbun = (int)(20.8431 + 0.242194*($year - $dirY) - (int)(($year - $dirY)/4));
$syubun = (int)(23.2488 + 0.242194*($year - $dirY) - (int)(($year - $dirY)/4));
$HOLARY[1] = ($year <= "2099") ? "03".substr("0".$syunbun,-2) : '';
$HOLARY[2] = ($year <= "2099") ? "09".substr("0".$syubun,-2) : '';
#★★★★★日の決まっていない祝日(何月第何月曜)★★★★★★
$mARY = array("01", "07", "09", "10");
$dARY = array("2", "3", "3", "2");
for($N=0;$N<4;$N++){
$monbuf=$mARY[$N];
$syu=$dARY[$N];
$youbibuf=strftime('%a',mktime(12,00,00,$monbuf,1,$year,0));#$Mon1月の1日の曜日を調べる
$shuARY=array("Sun"=>2,"Mon"=>1,"Tue"=>7,"Wed"=>6,"Thu"=>5,"Fri"=>4,"Sat"=>3);
$daybuf=$shuARY[$youbibuf];#これで最初の月曜日の日付がでる。
$daybuf+=($syu-1)*7;#これで何週目の月曜が指定できる。
if($daybuf<10){$daybuf=bTWOKETA($daybuf);}#2桁数字に整える。
$HOLARY[]=$monbuf.$daybuf;
}
#★★★★★★★★★★ここから振替休日★★★★★★★★★★★
foreach($HOLARY as $buf){
$Mbuf=substr($buf,0,2);
$Dbuf=substr($buf,2,2);
$youbi=bGETYOUBI($year,$Mbuf,$Dbuf);
if($youbi=="日"){
$Dbuf++;
$Dbuf=bTWOKETA($Dbuf);
}
$HOLARY2[]=$Mbuf.$Dbuf;
}
#★★★★★★★★★★ここから休日と休日の間・国民の休日を検索★★★★★★★★★★★
foreach($HOLARY2 as $buf){
$HOLARY3[]=$buf;
$Mbuf=substr($buf,0,2);
$Dbuf=substr($buf,2,2);
$Dbuf2=bTWOKETA($Dbuf+2);
if(array_search ($Mbuf.$Dbuf2, $HOLARY2)){
if(bGETYOUBI($year,$Mbuf,$Dbuf)<>"土"){
$HOLARY3[]=$Mbuf.bTWOKETA($Dbuf+1);
}
}
}
return $HOLARY3;
}
TOPへ
date/曜日を調べる
#★★★★★★★★★★★★★★★★★★★★★#
#★★★ 曜日を調べる ★★★#
#★★★★★★★★★★★★★★★★★★★★★#
function bGETYOUBI($year,$mon,$day){
#任意の日付けで曜日を出す
$youbi=array('日','月','火','水','木','金','土');
$y=$year;
$m=$mon;
$d=$day;
if ($m < 3) {--$y; $m+=12;}
$w=($y+ floor($y/4) - floor($y/100) + floor($y/400)+ floor((13*$m+8)/5) + $d) % 7;
return "$youbi[$w]";#.$hol;
}
TOPへ
mysql/insert
DataBaseへinsert
$sql="insert into bbs set name='$db_name',e_mail='$db_mail',title='$db_title',";
$sql.="url='$db_url',contents='$db_cont',remote_host='$ip',datetime=now()";
$result=mysql_query($sql);
if(!$result){
エラー処理
}
TOPへ
mysql/mysqlへの接続
★mysqlへの接続。
$con=@mysql_connect(server名,ユーザー名,パスワード);
$con=@mysql_connect("localhost",$user,$pass);
if(!$con){
えらー処理
}
※@をつけないとmysqlのエラー文が表示されてしまう。
TOPへ
mysql/select
★Databaseからselect
$sql="select * from bbs";
$result=mysql_query($sql);
※返り値はリソースID
・selectできた数を調べる
$row=mysql_num_rows($result)
TOPへ
mysql/クエリ発行
$sql="insert into Smaster set ";
$sql.=returnQuery($fieldNameList,0);
#print $sql;
#★★更新のsqlクエリ★★★★★★★★★★★★★★
$sql=stripslashes($sql);
$result = mysql_query($sql);
if(!$result){
return $_POST[ef0]."の新規保存に失敗しました。";
}else{
return $_POST[ef0]."を新規保存しました。";
}
TOPへ
mysql/接続
function OpenDB($ID,$PASS){
$user = $ID;#"COOP";
$pass = $PASS;#"coopsql";
$dbname = "kirari";
###MySQLへの接続
###mysql_connect(server名,ユーザー名,パスワード)
$con = @mysql_connect("localhost",$user,$pass);
#mysql_connectの返り値を$conに代入する
#失敗した場合は、「@」が関数の前についているので、$conには何も入らない
if(!$con){
#もし$conが変数として存在しない場合(中身が空の場合・値が0の場合・値がfalseの場合)
ErrorPrint("MySQLへの接続に失敗しました","MySQL接続エラー");
exit;
}
#DBの選択
$result = mysql_select_db($dbname);
#$result = mysql_query("use ".$user);
if(!$result){
ErrorPrint("DBの選択に失敗しました","DB接続エラー");
exit;
}
}
TOPへ
mysql/全てを選択
#全てを選択のクエリーを発行。
$sql="select * from bbs where delflg='N' order by datetime desc limit ".$tmp.",".($limit+1);
TOPへ
mysql/値の取り出し
値の取り出し。
$myAry=mysql_fetch_array($result,option);
option
MYSQL_NUM 通常配列で取り出しfieldの左から順に[0]・・・・
MYSQL_ASSOC 連想配列で取り出し
配列のkeyはmysqlのfield名
MYSQL_BOTH 上の両方。
例
#全てのデータを連想配列で取り出す。
$arr_data=mysql_fetch_array($result,MYSQL_ASSOC);
print $arr_data[name].",";
print $arr_data[e_mail].",";
print $arr_data[title].",";
print $arr_data[url].",";
print $arr_data[contents].",";
print $arr_data[remote_host].",";
print $arr_data[datetime].",";
print $arr_data[serial]."
";
★レコード分どうやって取り出すか
$arr_data=mysql_fetch_array($result,MYSQL_ASSOC);
↑これを繰り返すとデータを全て表示させることができる。
for ($i=1;$i<=$row;$i++){
#全てのデータを連想配列で取り出す。
$arr_data=mysql_fetch_array($result,MYSQL_ASSOC);
$name = stripslashes($arr_data[name]);
$mail = stripslashes($arr_data[e_mail]);
$title = stripslashes($arr_data[title]);
$url = stripslashes($arr_data[url]);
$contents = stripslashes($arr_data[contents]);
$remote_host = $arr_data[remote_host];
$datetime = $arr_data[datetime];
$serial = $arr_data[serial];
}
TOPへ
mysql/直前のupdate文で変更できたか
#mysql_affected_rowsの関数で変更がかかったかどうかチェックできます。
if(!mysql_affected_rows()){
#直前のupdate文で変更がかかっていなかったら。
ErrorPrint("パスワードが違います。");
exit;
}
TOPへ
mysql/動いているかTEST
<?php
$user="root";
$pass="68000";
$con=@mysql_connect("localhost",$user,$pass);
if(!$con){
print "えらー処理";}
$result=mysql_select_db("mysql");
$sql="select * from user";
$result=mysql_query($sql);
$row=mysql_num_rows($result);
$arr_data=mysql_fetch_array($result,MYSQL_ASSOC);
for ($i=1;$i<=$row;$i++){
print $arr_data[User];
}
?>
TOPへ
mysql/文字化け
「INSERT」、「UPDATE」のクエリする直前に
mysql_query("SET NAMES utf8")
mysql_query("SET NAMES ujis")
mysql_query("SET NAMES euc")
などで文字コードを指定しておくと
文字化けしないで登録できる。
TOPへ
php/do文
do文
$i=1;
do{
print "数値は".$i."です。
";
$i++;
}while($i <= 10);
TOPへ
php/foreach
foreach文(連想配列のキーと値を取り出せる。)★
$price=array("りんご"=>120,"みかん"=>80,"ぶどう"=>150);
foreach($price as $key=>$value)
{
print $key."は".$value."円だよ
";
}
TOPへ
php/for文
for文
for($i = 1 ; $i <= 10 ; $i++){
print "数値は".$i."です。
";
}
while文
$i=1;
while ($i <= 10){
print "数値は".$i."です。
";
$i++;
}
TOPへ
php/functionの作り方呼び出し方
■functionの作り方
function OpenDB($data="デフォルト値"){
#引数が無ければデフォルト値が使われる。
return $data;
}
呼び出し方
OpenDB($data);
外部ファイルを作る場合はsubpack.incなど拡張子incで。
TOPへ
php/スーパーグローバル変数
スーパーグローバル変数
$_GET[name]でGETで送信されたformのnameの内容を調べる。(旧バージョンでは$HTTP_GET_VARS)
$_POST[name]でPOSTで送信されたformのnameの内容を調べる。(旧バージョンでは$HTTP_POST_VARS)
$_ENV環境変数(旧バージョンでは$HTTP_ENV_VARS)
$_SERVERサーバー変数(旧バージョンでは$HTTP_SERVER_VARS)
$_COOKIEクッキーの値(旧バージョンでは$HTTP_COOKIE_VARS)
$_REQUESTゲットやクッキーやポストの内容全てが収納されるが下位互換なし。
$_FILESアップロードされたファイルの情報が入ります。(旧バージョンでは$HTTP_POST_FILES)
$_SESSIONセッションモジュールにより登録された内容が格納される。(旧バージョンでは$HTTP_SESSION_VARS)
TOPへ
php/算術演算子
■算術演算子
A + B
A = B
A * B
A / B
A % B A/Bのあまり
A++ Aに1を足す
A- Aから1をひく
TOPへ
php/条件分岐
★条件分岐
if ($data == "朝"){
print "おはようございます";
}elseif($data == "昼"){#★
print "こんにちは";
}else{
print "こんばんは";
}
TOPへ
php/比較演算子
■比較演算子
A > B
A < B
A >= B
A <= B
A == B等しい
A <> B違う★
TOPへ
php/変数
■変数
$data普通の変数
$data[0]配列
$data[name]連想配列
配列に値を入れるとき下記で自動でaddしてくれる。
$data[]="A"
$data[]="B"
$data[]="C"
$data=array("A","B","C")これでも同じ(arrayは関数名)
$data=array("1"=>"A","2"=>"B","3"=>"C")これも同じ。連想配列にも使える。
TOPへ
php/論理演算子
A and B AとB
A && B AとB
A or B AかB
A || B AかB
!A Aではない。
TOPへ
いろいろな値を受け取り/$_FILES ファイルのアップロード
<form action="image.php" method="post" name="f">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
アップロードファイルを選択してください。
<input type="file" name="img" size="40">
<input type="submit" name="upload" value="アップロード">
if($_POST[upload]=="アップロード"){
$fomatfol="./imgfolder";
hSAVEIMG($fomatfol,$_FILES);
}
#★★★★★★★★★★★★★★★★★★★★★#
#★★★ $_FILEを保存 ★★★#
#★★★★★★★★★★★★★★★★★★★★★#
function hSAVEIMG($imgFol,$_FILES){
if($_FILES['img']['name']){
#print $_FILES['img']['name']."
";#クライアントマシンの元のファイル名。
#print $_FILES['img']['tmp_name']."
";#アップロードされたファイルがサーバー上で保存されているテンポラ リファイルの名前。
#$_FILES['img']['type']#ファイルのMIME型。ただし、ブラウザがこの情報を提供する場合。 例えば、"image/gif"のようになります。
#$_FILES['img']['size']#アップロードされたファイルのバイト単位のサイズ。
#print $_FILES['img']['error'];
$kakucyou=$_FILES['img']['type'];
if (strpos($kakucyou,"jpeg")>0){$kakucyou="jpg";}
elseif (strpos($kakucyou,"jpg")>0){$kakucyou="jpg";}
elseif (strpos($kakucyou,"gif")>0){$kakucyou="gif";}
elseif (strpos($kakucyou,"png")>0){$kakucyou="png";}
else{$kakucyou="";}
if($kakucyou<>""){
copy($_FILES['img']['tmp_name'],$imgFol.$_FILES['img']['name']);
}
}
}
TOPへ
いろいろな値を受け取り/$_SERVER
■ユーザー情報の取得
$ip=$_SERVER["SERVER_ADDR"];
$blowser=$_SERVER["HTTP_USER_AGENT"];
print "<h2>あなたのIPアドレスは".$ip."です</h2>";
print "<h2>あなたのブラウザは".$blowser."です</h2>";
TOPへ
いろいろな値を受け取り/HOSTネームを調べる
$IP=getenv(REMOTE_ADDR);
$HOST=getenv(REMOTE_HOST);
if($HOST==""){$HOST=gethostbyaddr($IP);}
if(eregi("yahoobb219029008014|localhost",$HOST)){#proxやsquidが含まれる。
return "";
}
$PORT=getenv(REMOTE_PORT);
TOPへ
いろいろな値を受け取り/チェックボックス
チェックボックスの値の送受信
こんな感じで送ると
<td><input type="checkbox" name="FB[1]" value="2004/11/08">08</td>
<td><input type="checkbox" name="FB[2]" value="2004/11/09">09</td>
<td><input type="checkbox" name="FB[3]" value="2004/11/10">10</td>
<td><input type="checkbox" name="FB[4]" value="2004/11/11">11</td>
<td><input type="checkbox" name="FB[5]" value="2004/11/12">12</td>
こんな感じで受け取れる。
$FB=$_POST[FB];
if(!$FB){$FB[]="";}
foreach($FB as $buf){
print $buf;
}
$FBにはvalue値が入る
TOPへ
インストールや設定/httpd.confの変更など
php-4.2.0-win32フォルダの中のフォルダ名を
phpに変更してC:\phpの状態にする。
httpd.confに下記の3行を追加する。
LoadModule php4_module c:/php/sapi/php4apache.dll
AddType application/x-httpd-php .php .inc
AddType application/x-httpd-php-source .phps
さらに
phpフォルダ内のphp.ini-distをphp.iniにする
php4ts.dllをC:\WINDOWS\SYSTEMフォルダにコピーする。
国際化版ではこのインストール方法は使えないようだ。
TOPへ
インストールや設定/さくらサーバでメールをトリガーに(空メール)
転送先設定で届いたメールをPHPに転送するようにしておく
PHPでは転送されたメールを読み込んで処理する。
●設定1転送設定
さくらサーバ
コントロールパネルで
メールアドレスの管理
該当するメールの転送設定を作成する(転送先はなんでもいい)
FTPでさくらサーバに接続
/home/アカウント名/MailBox/メールID/
に.mailfilterができているので、内容を
to "| /usr/local/bin/php /home/アカウント名/www/test.php"
exit
に書き換えてアップ。
※要注意!パーミッションは600!!!
●設定2PHP
/home/アカウント名/www/test.phpの内容
#!/usr/local/bin/php -q
<?php
set_time_limit(0);
$stdin = fopen("php://stdin", "r");
while(!feof ($stdin)){
$mail .= fgets($stdin, 4096);
}
fclose ($stdin);
$fp = fopen('./mail.txt', "a");
set_file_buffer($fp, 0);
flock($fp, 2);
fwrite($fp, $mail);
flock($fp, 3);
fclose($fp);
?>
1行目の#!/usr/local/bin/php -qは必要!
動かすとでき上がるmail.txtを解析すればOK
TOPへ
インストールや設定/さくらサーバにPHP5
さくらレンタルサーバにPHP5をインストールする場合はスタンダード以上のプランでないとダメ
activecollabを参考にまとめてみました。
http://www.curlybrace.net/wp/activecollab
----------------------------------------------------------------------
1. PHP5をダウンロード
http://www.php.net/downloads.php
こちらのサイトから”php-5.X.X.tar.gz”を落とす。
----------------------------------------------------------------------
2. PHP5をサーバにアップ
/home/アカウント名/にworkディレクトリを作成しphpの圧縮ファイルをサーバにアップ。
----------------------------------------------------------------------
3. telnetでさくらサーバにつなげる
MACターミナルで“telnet アカウント名.sakura.ne.jp”と打ち込んで実行。
----------------------------------------------------------------------
4. ログインして圧縮されたファイルを解凍する
まずログインします。ログインしたら“cd /home/アカウント名/work/”と打ち込んで
tar.gzのあるフォルダまで移動。
“tar xzvf php-5.X.X.tar.gz”と打ち込んで解凍します。
“ls”コマンドでphp-5.X.Xというフォルダができたか確認。
----------------------------------------------------------------------
5. configにシェルを実行--(GDバンドル版)
★★★★★下記シェルスクリプトをconf.shというファイル名で保存★★★★★
#!/bin/sh
./configure \
--prefix=$HOME \
--with-config-file-path=$HOME/www/php5.ini \
--program-suffix=5 \
--with-pear=$HOME/share/pear5 \
--enable-force-cgi-redirect \
--enable-mbstring=all \
--enable-mbregex \
--enable-mbstr-enc-trans \
--enable-versioning \
--enable-trans-sid \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--with-mysql \
--with-openssl=/usr \
--with-soap=yes \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-ttf \
--with-freetype-dir=/usr/local \
--with-curl
★★★★★ここまで★★★★★
※\はバックスラッシュ(半角の¥)に置き換えて下さい。
“php-5.X.X/にconf.shアップ。
“cd php-5.X.X”
“sh conf.sh”で実行。
いろいろ文字が出て最後に「thank you for using(installing?) PHP」の文字が出る。
----------------------------------------------------------------------
6. makeコンパイル
シェルを実行したら、“make”でコンパイル。数分かかる。
----------------------------------------------------------------------
7.PEARを動かす設定をする。
“setenv PHP_PEAR_CACHE_DIR /home/アカウント名/php5/pear/cache;”
----------------------------------------------------------------------
8. make install
コンパイルが終わったら“make install”でインストールします。
/home/アカウント名/bin/のなかにphp5というフォルダが出来ますので
“ls /home/アカウント名/bin/”で確認してみてください。
----------------------------------------------------------------------
9. cpコマンドで移動
さくらのサーバだとcgi-binのフォルダがない可能性があるので、
ないときは“mkdir /home/アカウント名/www/cgi-bin”でフォルダを作る。
“cp 〜/bin/php5 〜/www/cgi-bin/php5.cgi”と打ち込んでコピーします。
----------------------------------------------------------------------
10. htaccessを設置
/home/アカウント名/www/の下に.htaccessを設置します。
すでにhtaccessファイルがあるようでしたら、既存のファイルに
Action php5-script /cgi-bin/php5.cgi
AddHandler php5-script .php5
を追加。
これで.php5という拡張子のファイルはPHP5で動作するようになります。
“exit”でログアウトして終了です。
----------------------------------------------------------------------
11.テスト
<?
phpinfo();
?>
をinfo.php5
という名前で保存してアップしてテストします。
----------------------------------------------------------------------
12.ディレクトリの削除
workディレクトリとアカウント名直下のphp5ディレクトリは削除してもOKみたい。
TOPへ
インストールや設定/モジュールを使えるようにする
mbモジュールを使用する方法
php.iniをC:\WINDOWSへ移動
;extension=php_mbstring.dll
の;をはずす
extension_dir = "./"を下記のように変更
extension_dir = "C:/php/extensions"
TOPへ
クッキーやヘッダ/setcookie
setcookie("KIRARI",time(),0);
setcookie("KIRARIUSER",$ID,0);
引数は
クッキー名,クッキーの値,有効期限
有効期限はtime()ユニックスまたはmktime()関数で作られる
UNIXタイムスタンプ形式
setcookie($NAME);
setcookie($NAME,0,0);
値を何も入れないとクッキーを消せる
TOPへ
クッキーやヘッダ/キャッシュさせない
# 日付が過去
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
# 常に修正されている
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
# HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
# HTTP/1.0
header("Pragma: no-cache");
TOPへ
クッキーやヘッダ/クッキーサンプル
#このファイルをインクルードするだけでチェックできる。
$NAME="KIRARI";
$OVERTIME=30;#単位分
$URL="./login.php";
$COOKIEFLG="true";
if(isset($_COOKIE[$NAME])){
$time=$_COOKIE[$NAME];
$timeflg1=time()-$time;
$timeflg2=60*$OVERTIME;
if($timeflg1>$timeflg2){
$COOKIEFLG="timeover";
setcookie($NAME);
setcookie($NAME,0,0);
}else{
setcookie($NAME);
setcookie($NAME,time(),0);
}
}else{$COOKIEFLG="false";}
if($COOKIEFLG=="true"){
return;
}
TOPへ
クッキーやヘッダ/プロクシに制限をかける
##########ここからプロクシチェック#############
$FLG=false;
$IP=getenv(REMOTE_ADDR);
$HS=getenv(REMOTE_HOST);
if($HS==""){$HS=gethostbyaddr($IP);}
$PO=getenv(REMOTE_PORT);
#.jp 、.bbtec.net 、 .il24.net 以外は規制
if(!eregi('\.jp|\.bbtec.net|\.il24\.net|localhost',$HS)){$FLG=true;}
#以下の環境変数に何か含まれてたらアウト
if(getenv(HTTP_VIA)){$FLG=true;}
if(getenv(HTTP_CACHE_INFO)){$FLG=true;}
if(getenv(HTTP_SP_HOST)){$FLG=true;}
if(getenv(HTTP_FORWARDED)){$FLG=true;}
if(getenv(HTTP_FORWARDED_FOR)){$FLG=true;}
if(getenv(HTTP_X_FORWARDED_FOR)){$FLG=true;}
if(getenv(HTTP_CLIENT_IP)){$FLG=true;}
#ホスト名にprox squid cache www dns firewall
if(eregi('prox|squid|cache|www|dns|firewall',$HS)){$FLG=true;}
if($FLG==true){
ERREXIT("プロクシ経由での予約は現在行っておりません。");
}
TOPへ
クッキーやヘッダ/携帯かどうか調べる
<?php
$user_agent= explode( "/", $_SERVER['HTTP_USER_AGENT']);
$TANMATSU=$user_agent[0];
if($TANMATSU=="DoCoMo"){$URL="indexk.php";}
elseif($TANMATSU=="L-mode"){$URL="indexk.php";}
elseif($TANMATSU=="ASTEL"){$URL="indexk.php";}
elseif($TANMATSU=="UP.Browser"){$URL="indexk.php";}
elseif($TANMATSU=="PDXGW"){$URL="indexk.php";}
elseif($TANMATSU=="J-PHONE"){$URL="indexk.php";}
elseif(preg_match("/^KDDI/",$TANMATSU)){$URL="indexk.php";}
else{$URL="demo.html";}
header("Location: ".$URL);
?>
TOPへ
ファイルの読み書き/mkdirロック
#★★★★★★★★★★★★★★★★★★★★★#
#★★★ ファイルロック ★★★#
#★★★★★★★★★★★★★★★★★★★★★#
function mkdirLook(){
global $lock;
if(file_exists($lock)){
#ファイルが存在して時間が昔のものなら消しておく。
$list=(stat($lock));
$ftime=$list[ctime];
$mytime=time();
if($mytime-5>$ftime){mkdirunlock();}
}
$retry=5;
while(file_exists($lock)){
if($retry==0){
#ロックに失敗したらエラーを返す。
return false;
exit;
}
sleep(1);
$retry--;
}
#成功したら
touch($lock);#空のファイルを作成する
chmod($lock,0755);
return true;
}
#★★★★★★★★★★★★★★★★★★★★★#
#★★★ ロック解除 ★★★#
#★★★★★★★★★★★★★★★★★★★★★#
function mkdirunlock() {
global $lock;
if(file_exists($lock)){
unlink($lock);
}
}
TOPへ
ファイルの読み書き/バックアップファイルを開く
書き込みに常に2つのファイルに書き込んでおき
開くときにファイルサイズの大きい方を開く。
バックアップがないときも下記で新たに作られる。
function READLIST($readFile){
$readFile=fGETBAK($readFile);
if(file_exists($readFile)){
$LIST=file($readFile);
}
$LIST=array_map('trim',$LIST);
return $LIST;
}
#★★★★★★★★★★★★★★★★★★★★★#
#★★★ バックアップファイル名をGET ★★★#
#★★★★★★★★★★★★★★★★★★★★★#
function fGETBAK($file){
$filebak=$file.".bak";
#####比較###########
if(file_exists($filebak)){
$baksize=filesize($filebak);
}else{
$baksize=0;
}
if(file_exists($file)){
$fsize=filesize($file);
}else{
$fsize=0;
}
if($baksize>$fsize){
#要領が大きいほうを小さい方にコピーする。
copy($filebak,$file);
chmod($file,0766);
$refile=$filebak;
}elseif($baksize<$fsize){
copy($file,$filebak);
chmod($filebak,0766);
$refile=$file;
}
return $refile;
}
#★★★★★★★★★★★★★★★★★★★★★#
#★★★ バックアップファイルにも書き込み ★★★#
#★★★★★★★★★★★★★★★★★★★★★#
function fWRITEBAK($file,$wStr){
if(file_exists($file)){
$fp=fopen($file,"w");#書き込み fpはfileの先頭
}
if($fp){
flock($fp,LOCK_EX);
fwrite($fp,$wStr);
flock($fp,LOCK_UN);#ファイルを閉じる前に実行。
fclose($fp);
}
#さらにバックアップもしておく。
if(file_exists($file.".bak")){
$fp=fopen($file.".bak","w");#書き込み fpはfileの先頭
}
if($fp){
flock($fp,LOCK_EX);
fwrite($fp,$wStr);
flock($fp,LOCK_UN);#ファイルを閉じる前に実行。
fclose($fp);
}
}
TOPへ
ファイルの読み書き/ファイルを削除
if(file_exists($lock)){
unlink($lock);
}
ファイルを消す
bool unlink (filename)
0=false
1=trueで返ってくる
TOPへ
ファイルの読み書き/フォルダ内リスト作成
<?php
$targetdir="./datafolder/";
$DIRLIST=GETDIRLIST($targetdir);
if($DIRLIST<>""){
foreach($DIRLIST as $buf){
print $buf."
";
}
}
#★★★★★★★★★★★★★★★★★★★★★#
#★★★ フォルダ内リスト作成 ★★★#
#★★★★★★★★★★★★★★★★★★★★★#
function GETDIRLIST($targetdir){
if($targetdir==""){
return "";
}
if(!file_exists($targetdir)){
return "";
}
$dir=dir($targetdir);
while(($ent=$dir->read()) !== FALSE){
if(preg_match('/.+xml$|.+html$/',$ent)){
$DIRLIST[]=$ent;
}
}
return $DIRLIST;
}
?>
TOPへ
ファイルの読み書き/開く
★開く
$fp=fopen(filename,"mode");
エラーのときは$fpは空になる。if(!$fp)で確認
modeは
r 読み込み fpはfileの先頭
r+ 読み書き fpはfileの先頭
w 書き込み fpはfileの先頭 fileがなければ作成※開いた瞬間ファイルの中身が空になる。
w+ 読み書き fpはfileの先頭 fileがなければ作成※開いた瞬間ファイルの中身が空になる。
a 書き込み fpはfileの終端
a+ 読み書き fpはfileの終端
※+がつくのは全部読み書き
★閉じる
fclose($fp);
★ファイルサイズを調べる。
filesize(filename);
★読み込む
fread($fp,バイト数);
バイト数はファイルサイズを調べて入れる。
このとき読み込んだバイト分カーソルも移動してしまう。
全部読み込むとファイルの最後にカーソルが移動する。
★カーソルを先頭に移動する。
rewind($fp);
TOPへ
ファイルの読み書き/開くお手軽に
改行区切りで配列がかえってくる。
$list1=file($file);
改行や余分なスペースを削除。
$list1=array_map('trim',$list1);
1つのテキストにしたい時は下記で
配列を結合する。この場合上のtrimはしない。
$StrData=implode("",$list1);
TOPへ
ファイルの読み書き/更新日を表示
$filename = 'database.csv';
if (file_exists($filename)) {
echo "最終更新日:" . date ("F d Y H:i:s.", filemtime($filename));
}
TOPへ
ファイルの読み書き/書き込む
★書き込む
fwrite($fp,"text");
★ファイルロック
flock($fp,operation)
ロックはfopenの直後にロック解除はfcloseの直前に
operation
LOCK_SH 共有ロック。読み込み可
LOCK_EX 排他的ロック 読み書き不可
LOCK_UN ロック解除 ※ファイルを閉じる前に実行。
$log="./count.dat";
$fp=fopen($log,"r+");
if(!$fp){
print "ファイルを開けませんでした。";
exit;
}
flock($fp,LOCK_EX);
$count=fread($fp,filesize($log));
rewind($fp);
$count++;
fwrite($fp,$count);
flock($fp,LOCK_UN);#ファイルを閉じる前に実行。
fclose($fp);
サンプル
function fWRITEGO($file,$writeTXT){
$FLG=true;
#print $file;
$fp=fopen($file,"w");#書き込み fpはfileの先頭
if($fp){
flock($fp,LOCK_EX);
fwrite($fp,$writeTXT);
flock($fp,LOCK_UN);#ファイルを閉じる前に実行。
fclose($fp);
}else{$FLG=false;}
chmod($file,0766);
}
TOPへ
正規表現/.*を改行もOKにする
s (PCRE_DOTALL)
この修飾子が設定された場合、
パターン中のドットメタ文字は
改行を含む全ての文字にマッチ。
これを指定しない場合、改行は除かれます。
この修飾子は、Perl の /s 修飾子と等価です。
TOPへ
正規表現/eregi_replace
$data=ereg_replace("\n","
",$data);#改行コードの変換
大文字小文字を区別しない
eregi_replace("http://","",$url);
TOPへ
正規表現/preg_grep
$ARY=preg_grep($data,$ARYmoto);
$dataは正規表現
$ARYmotoは配列。
配列の中から$dataにHITする配列を取り出す。
TOPへ
正規表現/preg_match
if(preg_match("/^KDDI/",$TANMATSU)){$URL="indexk.php";}
戻り値はint
preg_match("/^(.*)/",$moto, $matches);
print $matches[0];
$matches[0]はパターン全体にマッチしたテキスト。 $matches[1]は最初の括弧付きのサブパターンに
マッチしたテキスト 。
TOPへ
正規表現/パターン
. 改行以外のすべての文字
[a-zA-Z0-9] セット内の1文字[^a-zA-Z0-9] セット以外の1文字
\d 数字
\D 数字以外
\w 英数字
\W 英数字以外
\s スペース・tab・改行
\S スペース・tab・改行以外
\n 改行chr(10)
\r 復帰chr(13)
\t tab
\f 改ページ
\b バックスペース
\0 ヌル文字
? 0または1個
* 0個以上
+ 1個以上
{m,n} m個以上n個以下
abc abcにHIT
a|b|c aかbかcにHIT
$ 行の最後
^ 行の先頭
TOPへ
設定/Windowsインストール
php-4.2.0-win32フォルダの中のフォルダ名を
phpに変更してC:\phpの状態にする。
httpd.confに下記の3行を追加する。
LoadModule php4_module c:/php/sapi/php4apache.dll
AddType application/x-httpd-php .php .inc
AddType application/x-httpd-php-source .phps
さらに
phpフォルダ内のphp.ini-distをphp.iniにする
そしてC:\WINDOWS\php.ini状態にする
php4ts.dllをC:\WINDOWS\SYSTEMフォルダにコピーする。
国際化版ではこのインストール方法は使えないようだ。
ダウンロードはこのへんから
http://jp2.php.net/get/php-4.3.4-Win32.zip/from/a/mirror
TOPへ
設定/Windowsダウンロード
ダウンロードはこのへんから
http://www.php.net/downloads.php
Windows Binariesの中の
PHP 4.3.10 installerとか。
php-4.3.10-installer.exeをダウンロードしインストール
TOPへ
設定/php.iniの場所
<?php
phpinfo();
?>
で調べることができる。
MacOSXの場合は
/usr/local/php/lib/php.ini
TOPへ
設定/ディスプレイエラー
display_errors = On
これで表示
error_reporting = E_ALL & 〜E_NOTICE
Macではこうしないと
なんでもかんでもエラーに。。。
$ID=$_POST[myID];
とかが受けれなくなってしまう。
TOPへ
設定/モジュールを使用する方法
mbモジュールを使用する方法
php.iniをC:\WINDOWSへ移動
;extension=php_mbstring.dll
の;をはずす
extension_dir = "./"を下記のように変更
extension_dir = "C:/php/extensions"
TOPへ
配列/ソートする
sort($todaylist);
戻り値なし。引数の配列がそのまま変更される
natsort($todaylist);
自然なsortになる。
配列のKEYでSORT
ksort($hash);
krsort($hash);
TOPへ
配列/配列に分割
$ary=explode(",",$str);
文字列$strを
","区切りで配列に分解
逆は
$stringdata=implode(",",$ary);
TOPへ
配列/配列の連結して1つの配列
array_merge
<?php
$array1 = array ("key1" => "val1", 2, 4);
$array2 = array ("a", "b", "key1" => "val2", "etc" => "val3", 4);
$result = array_merge ($array1, $array2);
print_r($result);
?>
同じkeyは後ろが優先。
[key1] => val2
[0] => 2
[1] => 4
[2] => a
[3] => b
[etc] => val3
[4] => 4
TOPへ
変換/base64
$sub=base64_encode($sub);
$sub="=?ISO-2022-JP?B?".$sub."?=";
TOPへ
変換/str_pad
str_pad ($str,3 [, " " [, option]])
文字列を3ケタになるように" "で埋める
オプションの引数には、
STR_PAD_RIGHT,
STR_PAD_LEFT,
STR_PAD_BOTHを指定可能です。
指定されない場合、STR_PAD_RIGHT 。
$M="1";
$M=str_pad($M,2,' ',STR_PAD_LEFT);
結果$M=" 1"
TOPへ
変換/文字コード
$sub=mb_convert_encoding($sub,'JIS','SJIS');
SJIS<=JIS
string mb_convert_encoding (str, to-encoding [, from-encoding])
strの文字エンコーディングを from-encoding から to-encoding に変換。
from-encodingは","区切りで複数記述可。省略すると内部文字エンコーディング
from-encodingを"auto"にすると"ASCII,JIS,UTF-8,EUC-JP,SJIS"
UCS-2LE
ASCII
JIS
UTF-7
UTF-8
EUC-JP
SJIS
eucjp-win
sjis-win
TOPへ