| ホーム >> | プログラミング >> | PHP |
代入文の戻り値を調べてみると、
var_dump($foo = "bar"); // => string(3) "bar"変数に代入する値自身であることがわかる。
この性質を利用すれば、次のような表現ができる。
$a=$b=3; var_dump($a,$b); // => int(3) // => int(3)
while(($line=fgets($fp))!=FALSE){
...
}
電子メールアドレスをウェブサイトに掲載する場合などに、スパム対策でテキスト・データを画像に変換したい場合がある。変更頻度が低ければ、グラフィックソフトで画像を生成し、それを貼り込めば良いが、度々変更する場合などは、テキストファイルから動的に生成できると便利。
文字列を画像に変換するためにPHPのimagettftext()という関数を利用する。 この関数を使うためには、PHPをGDライブラリとFreeTypeライブラリが利用できる状態でコンパイルしておく必要がある。 コンパイル方法についてはこのサイトの「PHPインストール」のページを参考にして欲しい。
文字列から画像ファイルを作成し、それを表示するためのコードは次の通り。
<?php
$filename='address.png';
putenv('GDFONTPATH=' . realpath("."));
$fontname='ipag.ttf';
$email='E-mail: hoge@example.jp';
$img=imagecreatetruecolor(300,20); // 画像の大きさ
$bgColor=imagecolorallocate($img,255,255,255); //背景色
imagefill($img,0,0,$bgColor); //背景色を塗る
$fgColor=imagecolorallocate($img,0,0,0); //文字色
imagettftext($img,12,0,0,16,$fgColor,$fontname,$email);
imagepng($img, $address); //画像の書き出し
printf("<img src=\"%s\">\n", $address);
?>
このコードでは、カレントディレクトリに一旦画像ファイルを作成し、それを表示する。 また画像を作成するのに必要なTrueTypeフォント(ipag.ttf)もカレントディレクトリにあることを想定している。 フォントを用意せずに、組み込みフォントを使う場合にはimagettftext()の代わりにimagestring()の利用を検討するとよい。 ただし、imagestring()では日本語は使えない。
includeやrequireで読み込む外部ファイルを置くディレクトリを指定する方法には次の方法がある.
php.iniの中に
include_path = ".:./include:/usr/local/php5/lib/php"のような設定があるので,ここにコロンで区切ってパスを並べる.
.htaccessに
php_value include_path ".:/php/includes:/usr/local/php5/lib/php"のように書く.適用される範囲は.htaccessを置いたディレクトリ以下にあるPHPファイル.
PHPのset_include_path()を用いる.
set_include_path(".:/php/includes:/usr/local/php5/lib/php");
この設定方法を汎用的に用いるためには,
$path=$_SERVER["DOCUMENT_ROOT"]."/hogehoge/include"; set_include_path(get_include_path() . PATH_SEPARATOR . $path);のようにするとよい.
▼参考サイト or 参考文献
スクリプトの中でファイル名を取得するには、
$filename = basename($_SERVER['SCRIPT_NAME']);とすればよい。basename()はファイル名からディレクトリ部分を取り除く関数。
例えばPDFファイルをダウンロードする時に、ファイル名を指定するには次のように書く。
$output="output.pdf";
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=$output");
| 環境: | PHP 4.3.10 (cli) (built: Jan 4 2005 16:04:24) |
| Apache/2.0.52 |
PHPの設定ファイル php.ini に次のように設定する。
memory_limit = 100MB post_max_size = 98MB upload_max_filesize = 96MB
それぞれの値は、
memory_limit > post_max_size > upload_max_filesize
になるようにする。
PHPスクリプトを作成している段階では、エラーがブラウザに表示されるとデバッグしやすいが、実際に運用段階になれば、エラーメッセージをブラウザに出さないようにしなければならない。
エラーをブラウザに表示しないようにし(display_errors)、エラーログをファイルに出力し(log_errors)、エラーログを出力するファイルを指定する(error_log)には、php.iniに次のように指定する。
display_errors = Off log_errors = On error_log = /var/log/php
エラーログを出力するファイルに対してウェブサーバーの実行ユーザー apache2 の書き込み権限あるかどうかあらかじめ確認しておくこと。
php.ini の置き場所は、バージョンやディストリビューションによって変わる事があるため、実際に読み込まれているphp.iniを確認しておく。
$ /usr/local/php5/bin/php -r "phpinfo();" | grep php.ini Configuration File (php.ini) Path => /usr/local/php5/lib/php.ini
また、次のファイルを作成してウェブサイトに置き、ブラウザから読み込む方法もある。
<?php phpinfo(); ?>
何も設定しないと、HTTPヘッダー情報にPHPのバージョンが入る。 バージョン情報を見えなくするには php.ini を開いて expose_php を Offにする。
expose_php = Off
SQLite3のデータベースファイル hoge.sqlite3 がPHPスクリプトを書いたファイルと同じディレクトリにある場合、
$db=new PDO("sqlite:hoge.sqlite3"); //データベースを開く
として開く。SQLコマンドを実行するには、
$sql="SELECT * FROM mytable"; $stmt=$db->prepare($sql); $stmt->execute(); $row=$stmt->fetch();とする。mytableはデータベースに含まれるテーブルとする。
SQLコマンドに:valiableの形でプレースホルダーを埋め込んでおき、実行前に置き換えることができる。
$sql="SELECT * FROM mytable WHERE age>=:lowerAge AND age<:upperAge";
$stmt=$db->prepare($sql);
$stmt->bindValue(':lowerAge', 30, PDO::PARAM_INT);
$stmt->bindValue(':upperAge', 50, PDO::PARAM_INT);
$stmt->execute();
クエスチョンマークをプレースホルダーとして使うこともできる。
$sql="SELECT * FROM mytable WHERE age>=? AND age<?"; $stmt=$db->prepare($sql); $stmt->execute(array(30,50));この場合、executeメソッドの引数に配列として値を与える。