lubuntu-14.04 , IBM developerworks PHP の学習: | 乖離のぶろぐ(*´∀`)吸い込んで応援
http://ameblo.jp/pochifx/entry-11839397132.html
lubuntu-14.04-desktop-amd64.iso NetBeans PHPUnit
2014-05-06
(゚ω゚)の続き。
(゚ω゚)テスト方法も分かったから、もっとPHPを勉強していこう。

(゚ω゚)勉強しようと思い立ったら、IBMサイトを見る。
http://www.ibm.com/developerworks/jp/
(゚ω゚) 他のITニュースサイトに書いている内容は、
(゚ω゚) 肝心な事は「本を買って読め」とかに成ったりするが、
(゚ω゚) ibmは違う。筆者の伝えたい事が最後まで載っている。

(゚ω゚) 4,460件見つかった
(゚ω゚)多すぎる・・・

(゚ω゚)これが良さそうだ。
http://www.ibm.com/developerworks/jp/views/opensource/libraryview.jsp?contentarea_by=Open+source&search_by=PHP+%E3%81%AE%E5%AD%A6%E7%BF%92%3A
http://www.ibm.com/developerworks/jp/opensource/tutorials/os-phptut1/index.html
PHP の学習: 第 1 回 アカウントを登録し、承認を求めるファイルをアップロードし、承認されたファイルを表示してダウンロードする


(゚ω゚)読み進むと、MySQLが必要になる。
http://ameblo.jp/pochifx/entry-11802204450.html
(゚ω゚)前回Synapticでインストールしたが、今回はapt-getしてみる。
ubuntu@ubuntu-VirtualBox:/boot$ sudo apt-get install mysql-server
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
libdbd-mysql-perl libdbi-perl libhtml-template-perl libterm-readkey-perl mysql-client-5.5
mysql-client-core-5.5 mysql-server-5.5 mysql-server-core-5.5
提案パッケージ:
libclone-perl libmldbm-perl libnet-daemon-perl libplrpc-perl libsql-statement-perl
libipc-sharedcache-perl tinyca
以下のパッケージが新たにインストールされます:
libdbd-mysql-perl libdbi-perl libhtml-template-perl libterm-readkey-perl mysql-client-5.5
mysql-client-core-5.5 mysql-server mysql-server-5.5 mysql-server-core-5.5
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
8,412 kB のアーカイブを取得する必要があります。
この操作後に追加で 92.8 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
取得:1 http://jp.archive.ubuntu.com/ubuntu/ trusty/main libdbi-perl amd64 1.630-1 [879 kB]
取得:2 http://jp.archive.ubuntu.com/ubuntu/ trusty/main libdbd-mysql-perl amd64 4.025-1 [99.3 kB]
取得:3 http://jp.archive.ubuntu.com/ubuntu/ trusty/main libterm-readkey-perl amd64 2.31-1 [27.4 kB]
取得:4 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-client-core-5.5 amd64 5.5.37-0ubuntu0.14.04.1 [700 kB]
取得:5 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-client-5.5 amd64 5.5.37-0ubuntu0.14.04.1 [1,451 kB]
取得:6 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-server-core-5.5 amd64 5.5.37-0ubuntu0.14.04.1 [3,210 kB]
取得:7 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-server-5.5 amd64 5.5.37-0ubuntu0.14.04.1 [1,966 kB]
取得:8 http://jp.archive.ubuntu.com/ubuntu/ trusty/main libhtml-template-perl all 2.95-1 [65.5 kB]
取得:9 http://jp.archive.ubuntu.com/ubuntu/ trusty-updates/main mysql-server all 5.5.37-0ubuntu0.14.04.1 [12.5 kB]
8,412 kB を 5秒 で取得しました (1,495 kB/s)
パッケージを事前設定しています ...
以前に未選択のパッケージ libdbi-perl を選択しています。
(データベースを読み込んでいます ... 現在 117557 個のファイルとディレクトリがインストールされています。)
Preparing to unpack .../libdbi-perl_1.630-1_amd64.deb ...
Unpacking libdbi-perl (1.630-1) ...
以前に未選択のパッケージ libdbd-mysql-perl を選択しています。
Preparing to unpack .../libdbd-mysql-perl_4.025-1_amd64.deb ...
Unpacking libdbd-mysql-perl (4.025-1) ...
以前に未選択のパッケージ libterm-readkey-perl を選択しています。
Preparing to unpack .../libterm-readkey-perl_2.31-1_amd64.deb ...
Unpacking libterm-readkey-perl (2.31-1) ...
以前に未選択のパッケージ mysql-client-core-5.5 を選択しています。
Preparing to unpack .../mysql-client-core-5.5_5.5.37-0ubuntu0.14.04.1_amd64.deb ...
Unpacking mysql-client-core-5.5 (5.5.37-0ubuntu0.14.04.1) ...
以前に未選択のパッケージ mysql-client-5.5 を選択しています。
Preparing to unpack .../mysql-client-5.5_5.5.37-0ubuntu0.14.04.1_amd64.deb ...
Unpacking mysql-client-5.5 (5.5.37-0ubuntu0.14.04.1) ...
以前に未選択のパッケージ mysql-server-core-5.5 を選択しています。
Preparing to unpack .../mysql-server-core-5.5_5.5.37-0ubuntu0.14.04.1_amd64.deb ...
Unpacking mysql-server-core-5.5 (5.5.37-0ubuntu0.14.04.1) ...
以前に未選択のパッケージ mysql-server-5.5 を選択しています。
Preparing to unpack .../mysql-server-5.5_5.5.37-0ubuntu0.14.04.1_amd64.deb ...
Unpacking mysql-server-5.5 (5.5.37-0ubuntu0.14.04.1) ...
以前に未選択のパッケージ libhtml-template-perl を選択しています。
Preparing to unpack .../libhtml-template-perl_2.95-1_all.deb ...
Unpacking libhtml-template-perl (2.95-1) ...
以前に未選択のパッケージ mysql-server を選択しています。
Preparing to unpack .../mysql-server_5.5.37-0ubuntu0.14.04.1_all.deb ...
Unpacking mysql-server (5.5.37-0ubuntu0.14.04.1) ...
Processing triggers for man-db (2.6.7.1-1) ...
Processing triggers for ureadahead (0.100.0-16) ...
ureadahead will be reprofiled on next reboot
libdbi-perl (1.630-1) を設定しています ...
libdbd-mysql-perl (4.025-1) を設定しています ...
libterm-readkey-perl (2.31-1) を設定しています ...
mysql-client-core-5.5 (5.5.37-0ubuntu0.14.04.1) を設定しています ...
mysql-client-5.5 (5.5.37-0ubuntu0.14.04.1) を設定しています ...
mysql-server-core-5.5 (5.5.37-0ubuntu0.14.04.1) を設定しています ...
mysql-server-5.5 (5.5.37-0ubuntu0.14.04.1) を設定しています ...
140507 0:43:53 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.
mysql start/running, process 5236
libhtml-template-perl (2.95-1) を設定しています ...
Processing triggers for ureadahead (0.100.0-16) ...
mysql-server (5.5.37-0ubuntu0.14.04.1) を設定しています ...

(゚ω゚)rootのパスワードを設定した場合は -p が必要。

ubuntu@ubuntu-VirtualBox:~$ mysql -h localhost -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
ubuntu@ubuntu-VirtualBox:~$ mysql -h localhost -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 44
Server version: 5.5.37-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database workflow;
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> use workflow;
Database changed
mysql>
mysql> create table users (id int auto_increment primary key, username varchar(50),
-> email varchar(255), password varchar(50));
Query OK, 0 rows affected (0.04 sec)

mysql>
mysql> show tables;
+--------------------+
| Tables_in_workflow |
+--------------------+
| users |
+--------------------+
1 row in set (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'wfuser'@'localhost'
-> IDENTIFIED BY 'wfpass' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql>


(゚ω゚)ここまでのSQLの解説。
http://dev.mysql.com/doc/refman/5.1-olh/ja/example-auto-increment.html
1.6.9. AUTO_INCREMENT の使用
AUTO_INCREMENT 属性を使用すると、新しい行に一意の識別子を生成できます。

http://dev.mysql.com/doc/refman/5.1/ja/grant.html
12.5.1.3. GRANT 構文

(゚ω゚)動かしてみると、エラー。
ubuntu@ubuntu-VirtualBox:/var/log/apache2$ tail -2 error.log
[Wed May 07 02:42:08.128339 2014] [:error] [pid 1781] [client 127.0.0.1:50215] PHP 1. {main}() /home/ubuntu/NetBeansProjects/PhpProject6/registration_action.php:0, referer: http://localhost/PhpProject6/registration.php?XDEBUG_SESSION_START=netbeans-xdebug
[Wed May 07 02:42:11.260369 2014] [:error] [pid 1781] [client 127.0.0.1:50215] PHP Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in /home/ubuntu/NetBeansProjects/PhpProject6/registration_action.php:47\nStack trace:\n#0 /home/ubuntu/NetBeansProjects/PhpProject6/registration_action.php(47): PDO->__construct('mysql:host=loca...', 'wfuser', 'wfpass')\n#1 {main}\n thrown in /home/ubuntu/NetBeansProjects/PhpProject6/registration_action.php on line 47, referer: http://localhost/PhpProject6/registration.php?XDEBUG_SESSION_START=netbeans-xdebug
ubuntu@ubuntu-VirtualBox:/var/log/apache2$
ubuntu@ubuntu-VirtualBox:/var/log/apache2$ vi /home/ubuntu/NetBeansProjects/PhpProject6/registration_action.php

45 if (validate($_POST) == "OK") {
46 // Listing 33. Connecting to the workflow database
47 $dbh = new PDO('mysql:host=localhost;dbname=workflow', 'wfuser', 'wfpass');
48
49 echo "<p>Thank you for registering!</p>";
50 } else {
51 echo "<p>There was a problem with your registration:</p>";
52 echo validate($_POST);
53 echo "<p>Please try again.</p>";
54 }


(゚ω゚) php5-mysqlパッケージはインストールするらしい。
http://qiita.com/muniere/items/2a8039bb20eaa22aca30
Ubuntu 12.04でLAMP環境を構築する
from Kobito in Dec 26, 2012 (Edited Oct 29, 2013)

ubuntu@ubuntu-VirtualBox:~$ sudo apt-get install php5-mysql
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
php5-mysql
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
62.7 kB のアーカイブを取得する必要があります。
この操作後に追加で 297 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu/ trusty/main php5-mysql amd64 5.5.9+dfsg-1ubuntu4 [62.7 kB]
62.7 kB を 0秒 で取得しました (135 kB/s)
以前に未選択のパッケージ php5-mysql を選択しています。
(データベースを読み込んでいます ... 現在 117997 個のファイルとディレクトリがインストールされています。)
Preparing to unpack .../php5-mysql_5.5.9+dfsg-1ubuntu4_amd64.deb ...
Unpacking php5-mysql (5.5.9+dfsg-1ubuntu4) ...
Processing triggers for libapache2-mod-php5 (5.5.9+dfsg-1ubuntu4) ...
php5-mysql (5.5.9+dfsg-1ubuntu4) を設定しています ...

Creating config file /etc/php5/mods-available/mysql.ini with new version
php5_invoke: Enable module mysql for cli SAPI
php5_invoke: Enable module mysql for apache2 SAPI

Creating config file /etc/php5/mods-available/mysqli.ini with new version
php5_invoke: Enable module mysqli for cli SAPI
php5_invoke: Enable module mysqli for apache2 SAPI

Creating config file /etc/php5/mods-available/pdo_mysql.ini with new version
php5_invoke: Enable module pdo_mysql for cli SAPI
php5_invoke: Enable module pdo_mysql for apache2 SAPI
Processing triggers for libapache2-mod-php5 (5.5.9+dfsg-1ubuntu4) ...
ubuntu@ubuntu-VirtualBox:~$ sudo service apache2 restart
* Restarting web server apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
[ OK ]
ubuntu@ubuntu-VirtualBox:~$

(゚ω゚)読み進むと、表記バグに気づく。
(゚ω゚)赤い部分は不要。
http://www.ibm.com/developerworks/jp/opensource/tutorials/os-phptut1/index.html#list39
...
if (validate($_POST) == "OK") {
$dbh = new PDO('mysql:host=localhost;dbname=workflow', 'wfuser', 'wfpass');

$checkUserStmt = $dbh->prepare("select * from users where username = ?");
$checkUserStmt->bindParam(1, $name);
$name = $_POST["name"];
$checkUserStmt->execute();

if ($checkUserStmt->rowCount() == 0) {

$stmt = $dbh->prepare("insert into users (username, email, password)\
values (?, ?, ?)");
...
echo "<p>Thank you for registering!</p>";

} else {

echo "There is already a user with that name: <br />";

}

} else {
...


http://www.ibm.com/developerworks/jp/opensource/tutorials/os-phptut1/#list44
両方のファイルを、registration.php と同じディレクトリーに保存します。「ダウンロード」の PHPPart1SampleFiles.zip に含まれる images ディレクトリーと style.css ファイルも、そのディレクトリーにコピーしてください。
(゚ω゚)日本語サイトの「ダウンロード」されるzipファイルは、中身は違うソースがアップされている。
(゚ω゚)正しいファイルは、英語サイトから取ってくる。

http://www.ibm.com/developerworks/opensource/tutorials/os-phptut1/os-phptut1.html#list44

http://www.ibm.com/developerworks/jp/opensource/tutorials/os-phptut2/index.html
PHP の学習: 第 2 回 ファイルをアップロードし、ファイルの情報を XML または JSON 形式で保管し、表示する


http://www.ibm.com/developerworks/opensource/tutorials/os-phptut2/os-phptut2.html#list12
http://www.ibm.com/developerworks/jp/opensource/tutorials/os-phptut2/index.html#list12
に書いてあるmove_uploaded_fileが失敗していることに気づく。
(゚ω゚)move_uploaded_file関数。
http://jp2.php.net/manual/ja/function.move-uploaded-file.php
(゚ω゚)原因はdestinationが、今のデバッグ環境のパスと合ってない。
(゚ω゚)destinationのディレクトリの所有者は、www-data:www-dataでなければ移動に失敗する。


http://www.ibm.com/developerworks/jp/opensource/tutorials/os-phptut3/index.html

PHP の学習: 第 3 回 認証、オブジェクト、例外、ストリーム処理


(゚ω゚) apache2.conf に赤い部分を追加。
root@ubuntu-VirtualBox:/etc/apache2# ls -la
合計 112
drwxr-xr-x 8 root root 4096 5月 9 04:10 .
drwxr-xr-x 128 root root 12288 5月 9 00:30 ..
-rw-r--r-- 1 root root 7270 5月 9 04:10 apache2.conf
-rw-r--r-- 1 root root 7244 4月 20 00:05 apache2.conf.20140509
-rw-r--r-- 1 root root 7115 1月 7 22:23 apache2.conf.org

<Directory /home/ubuntu/NetBeansProjects/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
AllowOverride AuthConfig
</Directory>


(゚ω゚)DocumentRootに.htaccessファイルを作る。
root@ubuntu-VirtualBox:~/NetBeansProjects# ls -la
合計 24
drwxrwxr-x 5 ubuntu ubuntu 4096 5月 9 04:12 .
drwxr-xr-x 31 ubuntu ubuntu 4096 5月 9 04:12 ..
-rw-rw-r-- 1 www-data www-data 119 5月 9 04:12 .htaccess
drwxrwxr-x 4 ubuntu ubuntu 4096 5月 8 22:30 .svn
drwxrwxr-x 5 ubuntu ubuntu 4096 5月 9 00:23 PhpProject6
drwxrwxr-x 2 www-data www-data 4096 5月 8 21:59 hidden
root@ubuntu-VirtualBox:~/NetBeansProjects# pwd
/home/ubuntu/NetBeansProjects
root@ubuntu-VirtualBox:~/NetBeansProjects#


root@ubuntu-VirtualBox:~/NetBeansProjects# htpasswd
プログラム 'htpasswd' はまだインストールされていません。 次のように入力することでインストールできます:
apt-get install apache2-utils
root@ubuntu-VirtualBox:~/NetBeansProjects# apt-get install apache2-utils
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
apache2-utils
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
83.2 kB のアーカイブを取得する必要があります。
この操作後に追加で 345 kB のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu/ trusty/main apache2-utils amd64 2.4.7-1ubuntu4 [83.2 kB]
83.2 kB を 0秒 で取得しました (199 kB/s)
以前に未選択のパッケージ apache2-utils を選択しています。
(データベースを読み込んでいます ... 現在 118008 個のファイルとディレクトリがインストールされています。)
Preparing to unpack .../apache2-utils_2.4.7-1ubuntu4_amd64.deb ...
Unpacking apache2-utils (2.4.7-1ubuntu4) ...
Processing triggers for man-db (2.6.7.1-1) ...
apache2-utils (2.4.7-1ubuntu4) を設定しています ...

(゚ω゚)パスワードファイルを作成。

htpasswd -c /home/ubuntu/NetBeansProjects/PhpProject6/.htpasswd NickChase
New password:
Re-type new password:
Adding password for user NickChase

(゚ω゚)ディレクトリ構成
root@ubuntu-VirtualBox:~/NetBeansProjects# ls -la
合計 24
drwxrwxr-x 5 ubuntu ubuntu 4096 5月 9 04:34 .
drwxr-xr-x 31 ubuntu ubuntu 4096 5月 9 04:34 ..
-rw-rw-r-- 1 www-data www-data 133 5月 9 04:32 .htaccess
drwxrwxr-x 4 ubuntu ubuntu 4096 5月 9 04:32 .svn
drwxrwxr-x 5 ubuntu ubuntu 4096 5月 9 04:34 PhpProject6
drwxrwxr-x 2 www-data www-data 4096 5月 8 21:59 hidden
root@ubuntu-VirtualBox:~/NetBeansProjects# ls -la PhpProject6
合計 88
drwxrwxr-x 5 ubuntu ubuntu 4096 5月 9 04:34 .
drwxrwxr-x 5 ubuntu ubuntu 4096 5月 9 04:34 ..
-rw------- 1 www-data www-data 48 5月 9 04:33 .htpasswd
-rw-rw-r-- 1 ubuntu ubuntu 660 5月 7 20:44 Calculator.php
drwxrwxr-x 2 ubuntu ubuntu 4096 5月 8 00:52 PHPUnit
-rw-rw-r-- 1 ubuntu ubuntu 85 5月 7 20:22 bottom.txt
drwxrwxr-x 3 ubuntu ubuntu 4096 5月 8 00:52 images
-rw-rw-r-- 1 ubuntu ubuntu 186 5月 9 04:51 index.php
-rw-rw-r-- 1 ubuntu ubuntu 333 5月 8 14:04 login.php
-rw-rw-r-- 1 ubuntu ubuntu 1218 5月 8 21:06 login_action.php
-rw-rw-r-- 1 ubuntu ubuntu 354 5月 8 02:34 logout.php
drwxrwxr-x 3 ubuntu ubuntu 4096 5月 8 00:52 nbproject
-rw-rw-r-- 1 ubuntu ubuntu 1193 5月 7 21:44 registration.php
-rw-rw-r-- 1 ubuntu ubuntu 10928 5月 7 20:22 registration_action.php
-rw-rw-r-- 1 ubuntu ubuntu 6106 5月 9 01:11 scripts.php
-rw-rw-r-- 1 ubuntu ubuntu 3700 5月 7 21:44 style.css
-rw-rw-r-- 1 ubuntu ubuntu 1217 5月 2 2012 top.txt
-rw-rw-r-- 1 ubuntu ubuntu 478 5月 8 02:37 uploadfile.php
-rw-rw-r-- 1 ubuntu ubuntu 1028 5月 8 14:15 uploadfile_action.php
root@ubuntu-VirtualBox:~/NetBeansProjects#


(゚ω゚) http://localhost/PhpProject6/.htpasswd をブラウザで見ようとすると、
Forbidden
You don't have permission to access /PhpProject6/.htpasswd on this server.
Apache/2.4.7 (Ubuntu) Server at localhost Port 80
(゚ω゚)ファイルの存在はバレてるけど見えないから良いか・・

(゚ω゚)Apacheのバージョン確認。
apachectl -v
Server version: Apache/2.4.7 (Ubuntu)
Server built: Apr 3 2014 12:20:28

(゚ω゚)結局、loggedinディレクトリを作り、HTTP認証するしないの違いを見てみることにした。
(゚ω゚)HTTP認証の為のディレクティブは、
/etc/apache2/apache2.conf
(゚ω゚)に書く。赤い行がHTTP認証の部分。
<Directory /home/ubuntu/NetBeansProjects/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
AllowOverride AuthConfig
</Directory>

(゚ω゚)HTTP認証させたいディレクトリに .htaccess を置く。
/home/ubuntu/NetBeansProjects/PhpProject6/loggedin/.htaccess
(゚ω゚)の内容は、
AuthName "Registered Users Only"
AuthType Basic
AuthUserFile /home/ubuntu/NetBeansProjects/PhpProject6/.htpasswd
Require valid-user"

(゚ω゚)サービス再起動
sudo service apache2 restart

(゚ω゚) loggedin/.htaccess を置いた為、loggedinディレクトリはHTTP認証しなければ見えない。


(゚ω゚)デバッグした感想。
(゚ω゚)A要素のhrefは相対パスではなく、フルパスにすべき。