About   Code   Homepage   JavaScript   Memo   MT   PHP   Study   Tools   Vista   

■ メッセージをランダムに表示する

選択の対象となるテキストをquote.txtに保存しておく。テキスト間は改行コードで区切る。 テキストのなかに書式を指定するHTMLタグを書いておくことができる。
<?php
srand((double)microtime()*1000000);
$quote = file("quote.txt");
$today = array_rand($quote, 2);
$msg = $quote[$today[0]];
echo $msg;
?>
〔例〕

■ 今日の言葉を表示する

365日の言葉を日毎に表示する。

<?php
$msg= file("http://agorian.com/help/web/phpscript/msg.txt");
$key = date("z");
$today = $msg[$key[0]];
echo $today;
?>
〔例〕 こんにちは

XoopsやOpenPNEで使われているSmatyテンプレートエンジンは、コンテンツをプログラムから分離して開発するのに適している。アプリケーションデザインを志す人はSmartyを学習し使いこなせるようになると便利である。Smartyの日本語訳ドキュメントもある。

続きを読む "Smartyテンプレートエンジン" »

たとえば、ブラウザから http:/site.com/index.php?a=hello を呼び出すことを考える。?よりあとの文字列a=helloをphpで受け取って処理することができる。

続きを読む "URLに変数と値を指定する" »

PerlやJavaScriptと同様にphpにも世界的なコミュニティが存在する。
再利用可能なphp部品が、こちらから無料で入手できる。
※PEARは、PHP Extension and Application Repository の省略形である。PEARの詳細についてホームページ http://pear.php.net/ を参照。日本語マニアルは、http://pear.php.net/manual/ja/ にある。

■ 日付の設定

SNSソフトを米国設置のサーバにインストールしているため、日付が米国中部時間になる。これを日本時間で表示したいのだが・・・。 整数time()に現在時刻が Unix エポック (1970 年 1 月 1 日 00:00:00 GMT) からの通算秒が入っている。これに時差の16時間を秒単位で足して、$jatimeに入れる。この$jatimeをdate関数で書式変換して表示すれば良いことが分かった。
<?php $jatime=time()+(16*60*60);
$today = date("Ymd g:i a",$jatime); 
echo ($today);?>
   ⇒20170526 7:13 pm
〔注〕米国がサマータイムのときは15時間を足す。20170526 6:13 pm

続きを読む "Date 年月日と時刻" »

2006年秋からPHPを使うことが多くなった。オープンソースソフトのほとんどがPHPで書かれているから必要に迫られたということ。しかし、PHPスクリプト(言語、コード)の文法や意味はほとんど知らない。知らなくても、どんなPHPコードを書いて実行するとどんな結果になるかは分かる。だから見よう見まねでPHPを改変することを試行錯誤でやってきた。PHPで書かれたSNSソフトもおなじように改変してサーバに設置し運営している。

前々からPHPを勉強しようと思っていたが遅々として進まない。勉強して分かったと思っていてもすぐ忘れるのでメモをとることにした。


PHPコードは、HTML文書の中に、<?php と ?> で囲んで書くだけだ。ただし、そのHTMLファイルの拡張子は .html ではなく .php にする。ブラウザが、この拡張子のときは、そのファイルの中に php コードがあると判断して、PHPインタープリータを動かしてくれる。PHPインタープリータは、PHPコードを解釈して実行してくれる。<?php は <? でもよい。

たとえば、<?php echo "こんにちは"; ?> というPHPコードを解釈すると、そのコードの位置に、「こんにちは」という文字列を埋め込んでくれる。言い換えると、<~> の部分が「こんにちは」で置き換えられたHTMLファイルが作られて、ブラウザで表示されるということだ。それなら、最初から「こんにちは」と書いておけばよいではないか・・・。この場合はそのとおりだ。

たとえば、ブラウザでphpファイルを開いたときの時刻を表示するphpコードを書いてみる。

<?php$time = date("西暦Y年n月j日 Ah:i");print($time);?>
このphpは以下のように表示される。
西暦2017年5月26日 AM03:13

文字修飾をしてみよう。赤色の太字で時刻を表示する。
<font color=red weight=bold><?php$time = date("西暦Y年n月j日 Ah:i");print($time);?></font>
西暦2017年5月26日 AM03:13

dateで得られた値(この場合は文字列)を$timeに代入し、$timeをprintで印刷(表示)するというPHPコードだ。printはechoと同じである。

$time のように先頭が$ではじまる文字列を、PHP変数という。date はPHPで用意されている関数で、それに続く(~)は date の引数(パラメータ)だ。Y n j Ah i はdate関数でその意味が決められている。Y は4桁の西暦年、n は月・・・というように決められている。2008年9月の場合、Yn は 20089 、ym は0809 に置き換えられる。"~" は文字列データを示す。

PHPコードでは、半角空白や改行は無視される。ただし、全角の空白は"~"のなかでは空白の文字だが、それ以外に記述するとエラーになるので注意が必要だ。なお、ブログなどでWYSIWYGエディタで作成すると改行は、<br>に変換されることがあり、そのときはPHPエラーになる。

PHPコードの構造を分かりやすくするために以下のように記述をするが、転写すると ; のつぎに <br> が入っていることがあるので注意する。また、文字コード系は、Unicode(UTF-8)に統一するのが望ましい。JISやEUCを使うと文字化けが発生したり、PHPエーになったりすることが多い。

<?php
$time = date("西暦Y年n月j日 Ah:i");
print($time);
?>

〔注〕時刻はPHPファイルが保存されているサーバの時刻になる。本サイトは米国にあるので、日本時刻で表示するときは、こちらのようにする。
〔参考リンク〕

ファイル全体を読み込んで配列に格納する
array file ( string $filename [, int $flags [, resource $context ]] )
〔例1〕
<?php
// ファイルの内容を配列に取り込みます。
// この例ではHTTPを通してURL上のHTMLソースを取得します。
$lines = file('http://agorian.com/help/web/php/input.html');
// 配列をループしてHTMLをHTMLソースとして表示します。
//行番号をつけるときは、echo "Line #<b>{$line_num}</b> : "
foreach ($lines as $line_num => $line) {
    echo  htmlspecialchars($line) . "<br />\n";
}
?>
<html>
<head>
<title>input.html</title>
</head>
<body>
入力フォームです。名前を入力してみましょう。
<form action="http://agorian.com/help/web/php/output.php" method="post">
<table border="1"> <tr>
<td>名前</td> <td>
<input type="text" name="name"></td>
<td colspan="2" align="center">
<input type="submit" value="入力"></td>
</tr> </table>
</body>
</html>

〔例2〕
<?php
// 他の例として、Webページを文字列に取り込みます。file_get_contents()も参照してください。
$html = implode('', file('http://agorian.com/help/web/php/input.html'));
echo $html;
?>
input.html 入力フォームです。名前を入力してみましょう。
名前

説明

例1を使うと、指定したURLのファイルを読み込んでそのまま表示できる。例2では、ブラウザがHTMLタグを解釈して表示してくれる。この二つを使って、HTMLソースとブラウザ表示の両方を例示することができる。例1を改変して、Textareaに表示、それを編集してファイルに書き出セル用にすれば、簡単なウェブでのテキストエディタを作れる。オープンソースのWebエディターがあるので、それを解読して改変するといい。FCKEditorを改変して、指定したURLにあるファイルをWYSIWYG編集して更新できるようにしてみよう。次はファイルの書込みの勉強だ。

file_put_contents 文字列をファイルに書き込む

int file_put_contents ( string $filename , mixed $data [, int $flags [, resource $context ]] )
関数file_put_contentsは、PHP5の機能で、PHP4にはない。この関数を使うと、fopen()、fwrite()、 fclose() を続けてコールしてデータをファイルに書き込むのとおなじことができる。PHP4しかサポートしていないサーバがまだ多いので、fopen()、fwrite()、 fclose() で書いておいたほうがいい。

fopen ファイルまたは URL をオープンする

resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource $context ]] )
〔例〕
<?php
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");
?>
プロトコルのハンドラ(ラッパーともいう)のサポート、セーフモード、open_basedir有効 、php.iniでのallow_url_fopenなどの状態によっては、URLの書込みオープンができない。w 書込みのみ。 w+ 読み込みと書込み。ファイルポインターを先頭に置く。追加書き込みをするときは、ファイルポインターを終端に置く a または a+ を指定してオープンする。

fwrite ― バイナリセーフなファイル書き込み処理

string の内容を handle が指しているファイル・ストリームに書き込みます。
int fwrite ( resource $handle , string $string [, int $length ] )
handle - fopen() を使用して作成したファイルシステムポインタリソース
string - 書き込む文字列

〔例1〕文末に文字列を追加する

<?php
$filename 'test.txt';
$somecontent "Add this to the file\n";

// ファイルが存在しかつ書き込み可能かどうか確認します
if (is_writable($filename)) {
    // この例では$filenameを追加モードでオープンします。
    // ファイルポインタはファイルの終端になりますので
    // そこがfwrite()で$somecontentが追加される位置になります。
    if (!$handle fopen($filename'a')) {
         echo "Cannot open file ($filename)";
         exit;
    }
    // オープンしたファイルに$somecontentを書き込みます
    if (fwrite($handle$somecontent) === FALSE) {
        echo "Cannot write to file ($filename)";
        exit;
    }
    echo "Success, wrote ($somecontent) to file ($filename)";
    fclose($handle);
} else {
    echo "The file $filename is not writable";
}
?> 
〔例2〕カウンタ・ファイル書込み 5686
<?
$file = "counter.txt";
if ( !file_exists($file)){
        touch ($file);
        $handle = fopen ($file, 'r+');
        $str = "<? \$count=0 ?>";
}
else{
        include "counter.txt";
        $count++;
        $str = "<? \$count=".$count." ?>";
        $handle = fopen ($file, 'r+');
}
fwrite ($handle, $str);
fclose ($handle);
?>

fclose ― オープンされたファイルポインタをクローズする

bool fclose ( resource $handle )
〔例〕
<?php
$handle = fopen('somefile.txt', 'r');
fclose($handle);
?>

※以下の記述は、2006年頃にPHPを勉強しようと思って書いた。今はもっと分かりやすいサイトがあるかもしれない。

本家のPHPマニュアル
すべてを網羅しているが初心者には難しいかも。

PHP入門講座
沖縄在住のJONさんのサイト。初心者がPHPとはなにかを学ぶのに良い。多少プログラミングの概念がわかっていれば比較的容易にPHPを理解できる。


PHPの小部屋
いろいろ勉強できる「コモちゃん」のサイト。手軽に仕えるPHPプログラムがあり参考になる。

レッツPHP
掲示板やカウンターのサンプルがわかりやすく解説してある。

Do You PHP?
phpと関連ツール(Oracle,XML,OOPなど)を試した結果を公開している。
Hideyuki SHIMOOKAさんのサイトです。

はなれPHP島

HTTPサーバ認証

このコードを書いたページにアクセスしようとするとサーバが認証のためのポップアップ画面を表示する。ブラウザのポップアップを許可する必要がある。ユーザ名とパスワードを入力して認証する。いったん認証されるとブラウザを閉じるまで有効である。共有パソコンの場合は、最後にブラウザを閉じて認証をリセットしておく。サーバ管理者はcPanelのPassword Protect Directoriesでも設定できる。

続きを読む "PHP認証" »

PerlやJavascriptで書かれた無料のアクセスカウンタがたくさんある。ここでは学習メモにとどめる。 →2005年に作ったサンプル

つぎのカウンタ表示は設定不要のシンプルなPHPサンプル。軽いので携帯サイトに向いている。同一ホストの連続アクセスはカウントしない。

あなたは 人目の訪問者です。

続きを読む "PHPカウンター" »

 本格的なWebアプリケーションを作る場合、定型的な処理を1つのファイルにして、必要なところでrequire( )またはinclude( )で読み込むと便利である。これを活用して、開発の効率やメンテナンス性を向上させることができる。

 require( )は処理中に1回だけ読み込まれる。ループの中で読み込むファイル名を変える時などは、include( )を使用する。またrequire( )やinclude( )はローカルにあるファイルだけでなく、リモートにあるファイルもURLを指定して読み込むことができる。

【例1】 ページの先頭にメニューバー(topmenu.php)を組み込む

<?php
  require ("topmenu.php");
?>

【例2】 ループ処理の中で異なるファイルを複数読み込む

$mem = array ('one.htm', 'two.htm', 'three.htm');
for ($i=0; $i<count($mem); $i++) {
  include $mem[$i];
}

♣HTMLフォーム

<form action="foo.php" method="post">
    名前:  <input type="text" name="username" />
    メール: <input type="text" name="email" />
    <input type="submit" name="submit" value="送信" />
</form>
<?php
   echo $_POST['username']; echo $_POST['email'];
   echo $_REQUEST['username']; echo $_REQUEST['email'];  
?>

〔例1〕foo.phpが本ページのとき
名前:   メール:  
 
 

続きを読む "外部からくる変数" »