トップ
言語
PHP
プログラミング言語のPHPについてまとめています。読み方はピーエイチピーです。for文やmysql、ページングの例など、PHPとは?からやさしく説明しています。
この記事の目次です。
1. PHPプログラミング入門
2. PHPプログラミング基礎
3. サーバの設定など
4. mysql、ページングなど
5. フレームワーク、CMSなど
6. その他の参考情報
PHPとはどのような言語か簡単に見ていきます。
PHPは、主にWebサーバーと連携してWebページを動的に生成することを主目的に作られた、スクリプト式のプログラミング言語です。
Webページは、言いかえるとホームページのページです。WebページはHTMLというマークアップ式の言語で記述します。 HTMLで作成したファイルを、Web上に公開されているWebサーバに設置することで、ホームページのページがブラウザからアクセスして見れます。
このHTMLは、記述したものをそのまま表示するものです。基本的に条件に合わせて自動で表示内容を変更することができないです。 PHPを利用することでWebページを動的に生成することができます。
なお、PHPは、Webだけでなく、その他にGUIやコマンドラインなどのプログラムも作れます。
CMSで有名なWordPressもPHPで作られていいます。 HTMLを条件に合わせて自動で表示内容を変更することで実現しているWeb上で利用できるツールです。 PHPとMySQLを連携して作られているツールです。
MySQLとは、Excelのようにデータを表形式で保存する専用のソフトです。 データを保存するのに特化した専用ソフトで、それだけでは、何もできないソフトです。一般的にそのような専用の処理を行うソフトをミドルウェアといいます。
つまり、MySQLはデータ保存部分の機能に特化したソフトです。 WordPressなど、PHPのプログラムで作られたWebツールやシステムは、よくこのMySQLを使用して、データの保存部分の機能を実現しています。
なお、MySQLについての詳しい説明は以下にまとめています。
PHPは、1995年にRasmus Lerdorf氏により「Personal Home Page Tools」という名前で開発されました。 もともとはオンラインに置いてある彼の履歴書へのアクセスを解析するためのものでしたが、その後改良されて現在のPHPとなりました。
正式名称は、Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)です。 オブジェクト指向にも対応しており、クラスの定義や継承、インタフェースの定義、クラスメンバのアクセス制御の機能が利用できます。 CakePHPなど高度なフレームワークがあり、WordPressのような世界中で利用されているPHP製のCMSがあります。
PHPの特徴としては次のようなことがあげられます。
PHPスクリプトを実行するときの動作はPHPの設定ファイル(php.ini)で指定します。 php.iniはPHPをWebサーバのモジュールとして実行するときにはWebサーバの起動時に読み込まれます。 また、コマンドラインから実行するときには実行のたびに読み込まれます。
PHPファイルの拡張子は、一般的に.phpが利用されます。
書き方が分からないとPHPプログラミングが始められません。 まずは文法を覚えることが必要になります。 ここでは、ダブルクォーテーションのエスケープ、for文、関数などの文法をテーマにPHPプログラミングの基礎知識をまとめています。
「.htaccess」などPHPの環境面の内容をまとめています。
「.html」の拡張子のファイルでPHPを実行する場合は、以下の設定を「.htaccess」に記述します。
AddType application/x-httpd-php .php .html
ファイルアップロード関連はphp.iniの設定が関連してきます。
file_uploadsが「On」になっていないとそもそもアップロードできません。
有効にする場合の設定例です。
; Whether to allow HTTP file uploads. ; http://php.net/file-uploads file_uploads = On
PHPは一度、一時領域にファイルがアップロードされ、移動してファイルを使います。 upload_tmp_dirで一時領域のパスが指定できます。
/tmpにする場合の設定例です。
; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ; http://php.net/upload-tmp-dir upload_tmp_dir =/tmp
大きいファイルでサーバが落とされるリスクがあるため、ファイルサイズに制限があります。 upload_max_filesizeで制限サイズが変更できます。
アップロードファイルサイズの上限を5Mにする場合の設定例です。
; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize = 5M
ファイルのアップロードはセキュリティ面で注意が必要です。 極力入力値を使わないよう努力する必要があります。 /etc/passwdなどのパストラバーサル攻撃やファイルのプロパティやファイル内に仕込んだコードを意識したコーディングが必要です。
画像のアップロードを行うサンプルです。 アップロードするとファイルの幅を500pxに合わせてサイズ変更を行ってアップロードされます。 GDモジュールを使用します。
他にも考慮する点あるかと思いますが、 ファイルの形式などの基本的なチェックと画像編集ソフトにかけて万が一バイナリに不正コードが仕込まれても変換されるようにし、ファイル名ももともとのファイル名は使わないようにしてみました。
まずはフォーム部分です。 アップロードは「post」メソッドで、「multipart/form-data」を指定しないとできません。 入力チェックはサーバサイドで行わないと直接攻撃される恐れがあるのでフォームではしていません。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>アップロードサンプル</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="upload_file" id="upload_file"> <input type="submit" value="アップロード" name="submit"> </form> </body> </html>
次にPHP(upload.php)の内容です。
<?php if(!isset($_POST['submit'])) { echo 'フォーム送信されていませんでした。'; exit; } if ($_FILES['upload_file']['size'] > 5000000) { echo 'ファイルサイズが大きすぎました。'; exit; } $tmp_file = $_FILES["upload_file"]["tmp_name"]; if(!getimagesize($tmp_file)) { echo '画像ファイルと認識できませんでした。'; exit; } list($org_width, $org_height, $file_type) = getimagesize($tmp_file); $org_image = ""; $ext_str = ""; switch ($file_type) { case IMAGETYPE_JPEG: $org_image = imagecreatefromjpeg($tmp_file); $ext_str = '.jpg'; break; case IMAGETYPE_PNG: $org_image = imagecreatefrompng($tmp_file); $ext_str = '.png'; break; case IMAGETYPE_GIF: $org_image = imagecreatefromgif($tmp_file); $ext_str = '.gif'; break; default: echo "JPG、JPEG、PNG、GIF以外の形式でした。"; exit; } $width = 500; $height = 500 * ($org_height/$org_width); $canvas = imagecreatetruecolor($width, $height); imagecopyresampled($canvas, $org_image, 0,0,0,0, $width, $height, $org_width, $org_height); $save_dir = "uploads/"; $time_str = date("YmdHis"); $extension = strtolower(pathinfo($tmp_file,PATHINFO_EXTENSION)); $save_file = 'uploads/' . $time_str . $ext_str; switch ($file_type) { case IMAGETYPE_JPEG: imagejpeg($canvas, $save_file); break; case IMAGETYPE_PNG: imagepng($canvas, $save_file, 9); break; case IMAGETYPE_GIF: imagegif($canvas, $save_file); break; } imagedestroy($org_image); imagedestroy($canvas); echo '「' . $tmp_file. '」がアップロードされました。'; echo '保存ファイルは「' . $save_file . '」です。'; ?>
なお、アップロードされたファイルをセッション管理下で表示したい場合は、以下はのようにPHPで画像をレスポンスで返してあげれば解決します。
<php $image_file = '<アップロードファイルパス>'; $file_info = new finfo(FILEINFO_MIME_TYPE); $mime_type = $file_info->file($image_file); header('Content-Type: '.$mime_type); readfile($image_file); ?>
PHPの拡張モジュールの構築方法についてまとめていきます。
imagickとは、ImageMagick APIを使用してPHPからImageMagickを操作するためのPHPの拡張モジュールのことをいいます。
imagickをCentOS7にインストールする例を見ていきます。前提として、ImageMagickとImageMagick-develをインストールする必要があります。
ImageMagickをインストールします。
yum -y install ImageMagick yum -y install ImageMagick-devel
imagick-3.4.3のインストール例です。他のバージョンは「https://pecl.php.net/package/imagick」で確認できます。
$ wget https://pecl.php.net/get/imagick-3.4.3.tgz $ tar zxvf imagick-3.4.3.tgz $ cd imagick-3.4.3 $ phpize $ ./configure $ make # make install
imagickを使用したサンプルプログラムです。
<?php dl('imagick.so'); $filename = "test.jpg"; $image = new Imagick($filename); header("Content-Type: image/jpeg"); echo $image; $image->clear(); ?>
mysql、ページングなどのサンプルを紹介していきます。
PHPで作成したWebアプリケーションのサンプルです。
PHPで作成した簡単なWebアプリケーションのサンプルです。
public_htmlはHTML公開用のディレクトリでlibはライブラリ用のディレクトリとして、 今回はindex.phpからWebApplication.phpを読み込んで機能を利用します。
lib └─com └─zealseeds WebApplication.php public_html index.php
<?php include_once '../lib/com/zealseeds/WebApplication.php'; $webapp = new WebApplication(); echo $webapp->doGet(); ?>
<?php class WebApplication { private $html = "Hello World!!\n"; public function doGet() { return $this->html; } } ?>
phpがインストールされている環境でphpコマンドにパスを通して、以下のように実行します。
> php index.php Content-type: text/html Hello World!!
また、Webサーバ+PHPを構築したサーバのHTML公開用のディレクトリにソースファイルを配置して、 ブラウザよりindex.phpアクセスすると「Hello World!!」と出力されます。
mysqlを使用したPHPのサンプルを見ていきます。
PHPからmysqlを使用したWebアプリケーションのサンプルです。
例えば、この機能を使うとはじめの一回ライブラリのパスを設定すればよくなり、自前のライブラリを作りやすくなります。
public_htmlはHTML公開用のディレクトリでlibはライブラリ用のディレクトリとして、 今回はindex.phpからWebApplication.phpとMySQLClient.phpを読み込んで機能を利用します。
/home/user ├─lib │ └─com │ └─zealseeds │ │ WebApplication.php │ │ │ └─connection │ └─mysql │ MySQLClient.php └─public_html index.php
<?php set_include_path('/home/user/lib'); include_once 'com/zealseeds/WebApplication.php'; $webapp = new WebApplication(); echo $webapp->doGet(); ?>
<?php include_once 'com/zealseeds/connection/mysql/MySQLClient.php'; class WebApplication { private $html = ""; public function doGet() { $mysql = new MySQLClient(); $body = $mysql->doSelectOne('select body from pageinfo where id=1', 'body'); $this->html = "<html><body>" . $body . "</body></html>\n"; return $this->html; } } ?>
<?php class MySQLClient { public function doSelectOne($sql, $col) { $con = mysql_connect('localhost', 'dbuser', 'password'); $db_selected = mysql_select_db('dbname', $con); mysql_set_charset('utf8'); $result = mysql_query($sql); $row = mysql_fetch_assoc($result); $value = $row[$col]; mysql_close($con); return $value; } } ?>
> mysql -u dbuser -ppassword mysql> create database dbname; mysql> use dbname; mysql> create table pageinfo(id int PRIMARY KEY, body VARCHAR(64)); mysql> insert into pageinfo values (1, 'Hello World!!'); mysql> quit
phpがインストールされている環境でphpコマンドにパスを通して、以下のように実行します。
> php index.php Content-type: text/html <html><body>Hello World!!</body></html>
また、Webサーバ+PHPを構築したサーバのHTML公開用のディレクトリにソースファイルを配置して、 ブラウザよりindex.phpアクセスすると「Hello World!!」と出力されます。
PHPのページングのサンプルです。
<?php $paging_start = 0; if (!empty($_GET['start']) && is_numeric($_GET['start'])) { $paging_start = (int)$_GET['start']; } $paging_num = 20; if (!empty($_GET['num']) && is_numeric($_GET['num'])) { $paging_num = (int)$_GET['num']; } for ($i = $paging_start; $i <= $paging_start + $paging_num; $i++) { if ($i >= $search_result_count) { break; } echo '<p>' . $i . '件目</p>'; } echo '<ul>'; if ($paging_start >= $paging_num) { echo '<li><a href="//' . $_SERVER["HTTP_HOST"]; echo $_SERVER["REQUEST_URI"]; echo '&start=' . strval($paging_start-$paging_num); echo '&num=' . strval($paging_num); echo '">前の' . $paging_num . '件</a></li>'; } if ($paging_num < $search_result_count) { echo '<li>' . strval($paging_start+1); echo '-' . strval($paging_start+$paging_num) . '件</span></li>'; } if ($paging_start+$paging_num < $search_result_count) { echo '<li><a href="//' . $_SERVER["HTTP_HOST"]; echo $_SERVER["REQUEST_URI"]; echo '&start=' . strval($paging_start+$paging_num); echo '&num=' . strval($paging_num); echo '">次の' . $paging_num . '件</a></li>'; } echo '</ul>'; ?>
PHPのデバック方法について見ていきます。
var_dump()関数を使用することで変数の値が出力できます。
echo "<pre>"; var_dump($array); echo "</pre>";
フレームワークやCMSなどPHPプログラミングの応用知識をまとめています。
PHPのフレームワークの1つであるFuelPHPがあります。
FuelPHPは、オープンソースのHMVCパターンを用いるWebアプリケーションフレームワークです。
FuelPHPの読み方は「ひゅーえるぴーえいちぴー」です。
インストールは、「https://get.fuelphp.com/oil」で公開されているインストーラ(シェルスクリプト)を使用して行えます。
インストール後のディレクトリ構成にコマンドラインで移動して以下のようにタイプしてプロジェクトを作成します。
$ oil create <プロジェクト名>
fuel/ ・・・FuelPHPのプログラムやファイル |- app/ | | | |- logs/ ・・・ログファイル | |- classes/ | | |------- controller/ ・・・コントローラファイル | | | ∟ blog.php | | | | | |------- model/ ・・・モデルファイル | | | |- config/ ・・・各種設定ファイル | | | | | |- config.php ・・・ アプリケーションの設定ファイル | | | | | |- db.php ・・・データベースの設定ファイル | | | |- views/ ・・・ビューファイル | |- core/ ・・・標準で提供される機能 | |- packages/ ・・・パッケージ提供されるプログラムなど | public/ ・・・WEB公開ディレクトリ配置するディレクトリ
FuelPHPのドキュメントのURLは以下です。
https://fuelphp.com/docs/
2011年ころにリリースされ、人気が急上昇しているのがLaravelです。 もしPHPのフレームワークを学習するならLaravelがおすすめです。
Laravelとは、Taylor Otwell が開発したMVCモデルのWebアプリケーション開発用フレームワーク(オープンソース)です。 公式サイトでは、表現力豊かでエレガントな構文を備えたWebアプリケーションフレームワークと紹介しています。 MITライセンスで公開され無料で利用できます。
PHPの制作を行っている場合、WordPressが触れないとつらいですね。WordPress(ワードプレス)についてまとめています。
PHP関連のその他の参考情報です。
PHPと連携したテスト用に使用するApacheのインストールと設定方法についてまとめています。
http://httpd.apache.org/download.cgi (※URLは2007年3月時点のものです。) からダウンロードします。 このURLに行くと次のページが表示されます。
続いて、画面を下のほうにスクロールして「Apache HTTP Server 2.0.59 is also available」という項目を見つけます。
見つけたら、「apache_2.0.59-win32-x86-no_ssl.msi」をクリックしてダウンロードします。
※ApacheのバージョンとPHPのバージョンの組合せによって、うまく動作しないことがあります。
当サイトの説明を参照される方は、出来るだけ「apache_2.0.59-win32-x86-no_ssl.msi」をダウンロードするようにしてください。
それでは、インストーラを実行し、Apacheをインストールしていきます。
まず、ダウンロードした「apache_2.0.59-win32-x86-no_ssl.msi」というアイコンをダブルクリックしてインストーラを実行します。 次の画面が表示されたら、NEXT>ボタンをクリックします。
「I accept the terms・・・」をチェックしてNEXT>ボタンをクリックします。
さらに、NEXT>ボタンをクリックします。
サーバーの設定を行います。
ドメイン名、サーバー名、管理者のメールアドレスを入力し、NEXT>ボタンをクリックします。
※サーバーの設定はインストール後に変更できます。
セットアップを選択します。 ここでは、このままでNEXT>ボタンをクリックします。
Apacheをインストールするディレクトリを選択します。 ここでは、このままでNEXT>ボタンをクリックします。
設定が終了し、次の画面が表示されます。 「Install」ボタンをクリックするとインストールを開始します。
問題なくインストールが完了したら、インストールの最終画面が表示されるので、「Finish」ボタンをクリックします。
続いて、Apacheを起動して正しくインストールされているか確認します。 インストール終了後は、Apacheが起動していますので、ブラウザを起動してhttp://localhost/と入力して、 次のような表示がされれば、Apacheは正しくインストールされています。
スタート→すべてのプログラム→Apache HTTP Server 2.0.59→Control Apache Server→Startの順で選択します。
スタート→すべてのプログラム→Apache HTTP Server 2.0.59→Control Apache Server→Stopの順で選択します。
スタート→すべてのプログラム→Apache HTTP Server 2.0.59→Control Apache Server→Restartの順で選択します。
Apacheをアンインストールするには、Windowsのコントロールパネルでプログラムの追加と削除にて行います。
http://www.php.net/releases/index.php (※URLは2007年3月時点のものです。) からダウンロードします。 このURLに行くと次のページが表示されます。
続いて、画面を下のほうにスクロールして「5.1.6」という項目を探します。
見つけたら、「Windows binary」をクリックします。
※ApacheのバージョンとPHPのバージョンの組合せによって、うまく動作しないことがあります。 当サイトの説明を参照される方は、出来るだけ「5.1.6」をダウンロードするようにしてください。
次のページが表示されたら、日本の国旗の下にある「jp.php.net」をクリックします。 「ファイルのダウンロード」ダイアログボックスが表示されるので、任意の場所にダウンロードします。
まずはじめに、Cドライブの下にphpという名前のフォルダを作成します。 そして、「php-5.1.6-Win32.zip」を解凍し、そのフォルダ内のファイルをすべてC:\phpフォルダにコピーします。
次にphpフォルダ内にあるphp5ts.dll(コアPHP DLL)をC:\WINDOWS\system32にコピーします。
次にphpフォルダ内にあるphp.ini.distをC:\WINDOWSにコピーし、ファイル名をphp.iniに変更します。
次にApacheの設定を行います。 「C:\Program Files\Apache Group\Apache2\conf\httpd.conf(デフォルトの場合)」をテキストエディタで開きます。
※ファイルに記述されている「#」は、それ以降がコメントであることを表しています。
LoadModuleの最後に次の行を追加します。
LoadModule php5_module c:/php/php5apache2.dll
※php5apache2.dllの絶対パスを記述します。
AddTypeの最後に次の行を追加します。
AddType application/x-httpd-php .php
AddType application/x-httpd-source .phps
設定ファイルを変更したら、上書き保存してApacheを再起動すると、変更した設定が有効になります。
インストールしたPHPをApache用に設定します。 先ほどのWindowsフォルダに、名前を変更してコピーした「php.ini」をテキストエディタで編集します。
doc_root = の部分(460行目付近)を
doc_root = "c:\Program Files\Apache Group\Apache2\htdocs"
に設定します。
include_path = の部分(460行目付近)を
include_path = ".;c:\php\includes"
に設定します。
magic_quotes_gpc = の部分(420行目付近)を
magic_quotes_gpc = Off
に設定します。
extension_dir = の部分(460行目付近)を
extension_dir = "c:\php\ext"
に設定します。
設定ファイルを変更したら、上書き保存してApacheを再起動すると、変更した設定が有効になります。
ためしに、テキストエディタで次のコードを書き、index.phpという名前で、「 test」という名前のフォルダをC:\Program Files\Apache Group\Apache2\htdocsに作成して保存します。
「http://localhost/test/index.php」とブラウザのアドレス欄に入力すると、次の画面が表示されます。
ここでは、文字化けがおきてしまう場合の対応例を載せております。 文字化けがない場合、この設定により逆に文字化けがおきてしまうかもしれませんので参考までの情報としてください。
PHPは、ほとんどのOSで利用できますが、もともとはUNIXで使用するために開発された言語です。 Sift_JISやUnicodeで記述することも出来ますが、文字化けなどの問題を起こすこともあるので、EUC-JPで記述することが好ましいでしょう。
文字コードをEUC-JPで使うには、次のような設定を行います。
「php.ini」をテキストエディタで開きます。 当サイトで説明しているディレクトリ構成では「C:\Windows\php.ini」です。
次の行は、デフォルトでは先頭に;がついてコメントになっています。 ;を外して有効にします。 それぞれの行を次のように指定し、上書き保存します。
output_buffering = off | 出力バッファリングを無効にします |
default_charaset = EUC-JP | デフォルトのHTTP charasetをEUCにします |
extension = php_mbstring.dll | マルチバイト環境を設定します |
mbstring.language = Japanese | デフォルトの言語を日本語にします |
mbstring.encoding_translation = On | HTTP入力変換を有効にします |
mbstring.http_input = auto | HTTP入力文字コードを自動にします |
mbstring.http_output = EUC-JP | HTTP出力文字コードをEUCにします |
mbstring.internal_encoding = EUC-JP | 内部文字コードをEUCにします |
mbstring.substitute_character = none; | 処理できない代替文字を出力しません |
mbstring.detect-order = auto | 文字コード検出のデフォルト値を自動にします |
Apacheを再起動します。
以上で設定完了です。
テスト用のデータベースとしてSQLiteを設定します。
PHP5以降でははじめからSQLiteのモジュールが組み込まれています。 しかし、PHP5.1.0以降は手動で有効にしなければならないようになっています。
以下では、SQLiteの設定について説明してまいります。
PHPのphp.ini設定で拡張モジュールを使用するためにフォルダを指定しました。 extension_dir = の部分(460行目付近)が
extension_dir = "c:\php\ext"
に設定されていることを確認します。
次に、;extension=php_sqlite.dllの「;」を外して、
extension=php_sqlite.dll
とします。
PDOとはPHP Data Object拡張モジュールのことで、PHPからデータベースにアクセスするためのインターフェースを定義するものです。 データベースにアクセスするには、データベース固有のPDOドライバが必要になります。
先ほどのextension=php_sqlite.dllに次の2行を追加します。
extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll
とします。
Apacheを再起動し、phpinfoのコードを記述して確認してみましょう。
ブラウザを開き、SQLiteの情報が表示されていればOKです。
更新履歴になります。
スポンサーリンク
サイト内のページ
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
開発環境
Ant
/Eclipse
/gcc
/gdb
/Git
/g++
/JDK
/JUnit
/ZAP
技術・仕様
Ajax
/CORBA
/Java EE(旧称J2EE)
/JNI
ライブラリ/Framework/CMS
bootstrap
/jQuery
/Lucene
/MyBatis
/Spring
/Struts
/WordPress
Web API
Google Maps
ITインフラ
OSとミドルウェア
Linux
/Windows
/シェル
Apache/Tomcat
/MySQL
/Redis
/Solr
ITインフラ
セキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
/小さな会社のISMS
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
3.221.159.255
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク