-
PHPでのQRバーコードの生成方法ですが、以下のサイトにフリーソフトが公開されていますのでこれを使ってみます。
⇒QRcode Perl CGI & PHP scripts ver. 0.50
ページの下の方の「qr_img0.50j.tar.gz (1007KB)」をダウンロードします。
ダウンロードしたファイルを展開し「qr_img0.50j」フォルダができますので、 PHPプログラムのあるディレクトリに全てをコピーします。
このプログラムの使い方は「qr_img0.50j/README.txt」に詳しく書かれていますが、 プログラムの出力が画像データそのものなので、HTMLのIMGタグのURLとして指定すれば ブラウザでQRコードが表示されます。
HTMLのソースは以下の様になります。<!DOCTYPE html> <html lang="ja"> <body> <IMG SRC="./qr_img0.50j/php/qr_img.php?d=test"> </body> </html>
PHPのプログラムで使う場合は以下の様なソースになります。<?php // コード化したいURL $strQR = urlencode("./test.html?data=aaaaaa"); // QRコードの生成(デフォルトでPNGファイル生成) $strURL = 'http://localhost/_qr/qr_img0.50j/php/qr_img.php?d='.$strQR; $qr_img = file_get_contents($strURL); // PNGファイルの書込み $fp = fopen('./qrcode.png', 'w'); fputs($fp, $qr_img); fclose($fp); ?> <!DOCTYPE html> <html lang="ja"> <body> <IMG SRC="./qrcode.png"> </body> </html>
ここで注意するのは「qr_img.php」を呼出す場合は、URLをサイトの先頭から記述することです。
PR -
PHPでの長い処理の中で単にブラウザに表示する場合、以下の様な手順で行います。
まず最初にブラウザに対する出力用バッファを最初にフラッシュをします。
その後、長時間の処理のループで echo 関数で文字列を表示した時に その都度バッファのフラッシュを行います。
プログラムの例としては以下の通りです。<?php // 実行時間の無制限 set_time_limit( 0 ); // 出力バッファクリア ob_end_flush(); ob_start(); // 結果が出力される様に空白出力 echo str_repeat( ' ', 4096 ); echo("start...<br />\n"); for($i = 1; $i <= 100;$i++){ //件数表示 echo($i."件目処理...<br />\n"); ob_flush(); flush(); sleep(10); } echo("end...<br />"); ob_flush(); flush(); ?>
-
HTMLの a タグのリンク先にPHPプログラムを指定してファイルをダウンロードする方法ですが、 リンクファイルの引数を GET 指定する様にします。
HTMLのソースは以下の様にします。 リンクファイルの引数を file として、その値にファイル名を直接指定しています。
呼出すPHPプログラムは download.php とします。
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> </head> <body> <h1>ファイルダウンロード</h1> <br /> <a href="./download.php?file=test.txt">ファイルダウンロード(test.txt)</a> </body> </html>
PHPプログラムは以下の通りです。
<?php //指定ファイル名 if(!isset($_GET['file'])){ exit(); } $fileName = $_GET['file']; //ヘッダ header('Content-Type: application/force-download'); //ダイアログボックスの表示ファイル名 header('Content-Disposition: attachment; filename="'.basename($fileName).'"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: '.filesize($fileName)); header('X-Download-Options: noopen'); //出力バッファの無効化 while (ob_get_level()) { ob_end_flush(); } flush(); //ファイル出力 readfile($fileName); ?>
いろんなサイトを見ると、 出力ヘッダのタイプは application/force-download でOKな様です。
ファイル出力は readfile() で行います。
-
json_decode を使っていた時に JSON としては問題無いのではと思っていたものが、 結果として NULL が返ってきていました。
PHP のソースとしては以下の様な感じです。<?php $strJson = file_get_contents('test.json'); $arrData = json_decode($strJson, true); // この $arrData がNULLになる ?>
test.json の内容は以下です。{ records: [ { id: 1, data1: "aaaaa", data2: "111" }, { id: 2, data1: "bbb" , data2: "2222"}, { id: 3, data1: "cccc" , data2: "333" } ] }
データの見た目は特に問題無い様なのですが、上手くいかなかったので PHP のマニュアルにあたってみると、 要素名はダブルクォートで囲まないと json_decode の結果が NULL で返ることが載っていました。 早速、要素名をダブルクォートで囲んでみました。{ "records": [ { "id": 1, "data1": "aaaaa", "data2": "111" }, { "id": 2, "data1": "bbb" , "data2": "2222"}, { "id": 3, "data1": "cccc" , "data2": "333" } ] }
json_decode の結果として records の配列が返ってきました。
やはり何かおかしい動きが在ったら先ず正式なドキュメントを見ることですね。 (私自身の戒めですが)
-
PHPでは変数に関数名を設定し、その変数の後に括弧(())を付けることで、変数に設定された関数を実行します。 これは、似た様な関数を作成した時に、何かの条件で関数の実行振り分ける時に使えるかと思います。
以下の例では、2個の関数を宣言し、関数名の配列を宣言し、繰り返し処理でそれぞれの関数を実行しています。
<?php //最初の関数宣言 function func1() { echo "func1......<br>"; } //2番目の関数宣言 function func2() { echo "func2******<br>"; } //関数名を配列に設定 $arr = array("func1", "func2"); //配列を順次処理する foreach ($arr as $strFuncName) { //関数を実行 $strFuncName(); } ?>
結果は以下の表示になります。func1...... func2******
それぞれの関数が実行されたことが分かります。
可変関数の方法をクラスにも適用できます。 可変関数の様に別名のクラスを用意し、同じメソッドを持たせてみます。<?php //最初のクラス宣言(メソッド1個のみ) class test1 { function hello() { echo "test1 : hello<br>"; } } //2番目のクラス宣言 class test2 { function hello() { echo "test2 : hello<br>"; } } //クラス名を配列に設定 $arrClass = array("test1", "test2"); //配列を順次処理する foreach ($arrClass as $strClassName) { //クラス生成 $test = new $strClassName; //メソッド呼び出し $test->hello(); //クラスのインスタンス廃棄 unset($test); } ?>
この結果は以下の様に、クラスが順次生成され、「hello」メソッドが呼び出されることが分かります。
test1 : hello test2 : hello