SSブログ

「PHP」でアンケート一覧表示させてみる。 [PHP]

「PHP」でアンケート一覧表示させてみる。

■アンケート一覧表示確認。

       
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>アンケート一覧表示。</title>
        </head>
        <body>
        
      <?php ←「PHP」プログラムの開始。
        $dsn = 'mysql:dbname=phpbasic;host=localhost'; ←ローカルホストの「phpbasic」に。
        $user = 'root'; ←「root」権限で。
        $password = 'XXXXX;
        $dbh = new PDO($dsn,$user,$password); ←データベースに接続。
        $dbh->query('SET NAMES utf8'); ←命令内容記述。query('命令実行するSQL文');
        $sql = 'SELECT * FROM enquete WHERE 1'; ←「enquete」から全部。
        $stmt = $dbh->prepare($sql); ←「SQL文」で命令を出す準備。
        $stmt->execute(); ←データベースに「SQL文」を送信。「$stmt」に結果が返る。
        
      while(1) ←無限ループ。
        {
        $rec = $stmt->fetch(PDO::FETCH_ASSOC); ←1レコード取り出し。
        if($rec==false) ←取り出すレコードが「無くなったら」、
        {
        break; ←このループから脱出。
        }
        print $rec['code']; ←1レコード文の表示。
        print $rec['nickname']; ←1レコード文の表示。
        print $rec['email']; ←1レコード文の表示。
        print $rec['goiken']; ←1レコード文の表示。
        print '<br/>';
        }
      $dbh = null; ←データベース切断。
        ?> ←「PHP」終了。
      </body>
        </html>
      
       
      
26日、27日の記事と連動しています。 「ichiran.php」として「/var/www/htm/php」に保存。
「while(1)」(これより以前↑のプログラムの説明は先日分に) ループをするのですが(1)を付けることで無限ループになります。
「$rec = $stmt->fetch(PDO::FETCH_ASSOC);」で「$stmt」からデータを取り出します。「fetch」が順番に1レコードずつ取り出す命令。
「$stmt」に収まっているデータを「FETCH」により一つずつデータを取り出し、「$rec」に代入します。
1レコードは「code」「nickname」「email」「goiken」となります。
(詳細:http://www.phpbook.jp/tutorial/pdo/index7.html)

「if($rec==false)」はIF文で「もし~なら~する」ということですが、「==」は「同様なら」と言う意味で、「false」つまり「無」ならループから抜け出すという意味です。それまではループし、再び「$stmt」からデータを取り出し「$rec」を上書きします。
 ループから脱却する前に取り出したデータをフィールド名毎に「print」で表示させています。そしてループの初めに戻ります。

「$dbh = null;」によりデータベース切断します。

http://192.168.0.66/php/ichiran.php にアクセスすると下記のように表示されます。
1bibo-rokubibo-roku@yahoo.co.jpなななもはー
2magellanmagellan@yahoo.co.jpねむねむはー
3mekamochimekamochi@yahoo.co.jpこめたぬはー


■データ検索のページを作成してみる。(search.html)

       
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>データ検索</title>
        </head>
        
<body> <form method="post" action="search.php"> ご意見コードを入力してください。<br> <input name="code" type="text" style="width:100px"><br> <br> <input type="submit" value="送信"> </form>
</body> </html>


■データ検索のページを作成してみる。(search.php)

       
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>PHP基礎</title>
        </head>
        <body>
        
<?php $code=$_POST['code']; $dsn = 'mysql:dbname=phpbasic;host=localhost'; $user = 'root'; $password = 'XXXXX; $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql = 'SELECT * FROM enquete WHERE code='.$code; $stmt = $dbh->prepare($sql); $stmt->execute();
while(1) { $rec = $stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } print $rec['code']; print $rec['nickname']; print $rec['email']; print $rec['goiken']; print '<br/>'; }
$dbh = null;
?>
</body> </html>
http://192.168.0.66/php/search.html
2[送信]にて下記表示されました。
2magellanmagellan@yahoo.co.jpねむねむはー
しかし
3 or 1[送信]にすると……
1bibo-rokubibo-roku@yahoo.co.jpなななもはー
2magellanmagellan@yahoo.co.jpねむねむはー
3mekamochimekamochi@yahoo.co.jpこめたぬはー
全部表示されてしまいました。これを「SQLインジェクション」と呼ぶ悪い行為だそうです。
これを禁止しましょう。
今回の場合「3 or 1」が「3 かもしくは全部のデータを出しなさい」という意味になります。「or 1」が「もしくは全部」になります。


■「SQLインジェクション」を阻止する。

       
     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>PHP基礎</title>
        </head>
        
        <body>
        <?php
        $code=$_POST['code'];
        $dsn = 'mysql:dbname=phpbasic;host=localhost';
        $user = 'root';
        $password = 'maria';
        $dbh = new PDO($dsn,$user,$password);
        $dbh->query('SET NAMES utf8');
        $sql = 'SELECT * FROM enquete WHERE code=?'; ←変数の連結を止める。
        $stmt = $dbh->prepare($sql);
        $data[]=$code; ←新たな変数を使う。
        $stmt->execute($data); ←データを格納した変数を指定。
        
while(1) { $rec = $stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } print $rec['code']; print $rec['nickname']; print $rec['email']; print $rec['goiken']; print '<br/>'; } $dbh = null; ?> </body> </html>
「$sql = 'SELECT * FROM enquete WHERE code='.$code;」を、変数の連結をやめて、データを入れたい部分を「?」で表現します。
「$sql = 'SELECT * FROM enquete WHERE code=?';」とします。
「$data[]=$code;」新たに変数を作りそこにデータを格納します。
「$stmt->execute($data);」SQL文で命令を出すときに、データを格納した変数を指定します。

http://192.168.0.66/php/search.php
3 or 1[送信]とすると
3mekamochimekamochi@yahoo.co.jpこめたぬはー
となります。これをプリペアードステートメントという書き方だそうです。


「PHP」でアンケートページ作成。 [PHP]

「PHP」でアンケートページ作成。

「PHP」で動くHTMLを作る。

 27日、28日の記事と連動しています。  これまでに「PHP」や「MariaDB」や「phpmyadmin」や「apache」をインストールしたのですからこれらを利用してHTMLを作成してみます。
 といっても、ほぼ書籍の内容なのですが。ありがとうございました。
 下記のファイル「index.html」「check.php」「thanks.php」をとりあえず「/var/www/html/php」に置いてみます。
 パーミッションは「755」にしてみました。

アンケートの index ページ。(index.html)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>アンケートの入力</title>
</head>
<body>

<form method="post" action="check.php"> ←『form』は入力・送信フォームを作成する際に使用。『method』は送信の際の転送方法。『post』は一般的なフォームで使用される。(長文など)『action』は送信先プログラムのURIを指定。つまり入力したデータをcheck.phpに送信する。
ニックネームを入力してください。<br>
<input name="nickname" type="text" style="width:100px"><br> ←『input name』インプットタグのname属性。入力されたデータが送信される際に、名付けたデータ名(ここではnickname)とその値を一組にしてaction属性で指定したURIにmethod属性で指定した方法(post)で送信される。
メールアドレスを入力してください。<br>
<input name="email" type="text" style="width:200px"><br>
ご意見を一言でお聞かせください。<br>
<input name="goiken" type="text" style="width:300px"><br>
<br>
<input type="submit" value="送信">
</form>
</body>
</html>

アンケートのチェックページ。(check.php)

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5 <title>アンケートのチェック</title>
6 </head>
7 <body>
8
9 <?php ←『<?php』 と 『?>』の間にコードを記述する。
10 $nickname=$_POST['nickname']; ←『$nickname』このPHPプログラムで使用する変数。『$』を付ける。中身は右辺の『$_POST['nickname']』。←これは HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列。今回はHTMLファイル(index.html)中の『<input name="nickname"~』の値が代入される。
11 $email=$_POST['email']; ←『;』PHPの行の最後に付ける。
12 $goiken=$_POST['goiken']; ←つまりここまででHTMLファイルから値を三つ受け取り、それぞれ変数に代入している。
下記のように変数はたびたび利用されるようなので最初に設定記述するのが良いかも知れない。

13 ←空行は見やすくするため。
14 $nickname=htmlspecialchars($nickname); ←『htmlspecialchars』関数。HTML の表現形式に変換しその文字列を返す。ここでは利用者が入力したテキストの中にタグなどが混入された場合それを無害化する。つまりクロスサイトスクリプティングをサニタイジングするということ。
15 $email=htmlspecialchars($email);
16 $goiken=htmlspecialchars($goiken);
17
18 if($nickname=='') ←IF文。『==』イコールが二連結で『同じなら』という意味。『''(シングルクォート二つ)』で『空欄』という意味。つまり変数$nicknameに値が入力されていなければ。ということ。
19 { ←『{ }』の間の処理が↑の条件に合えば行われ↓が表示されることになる。
20 print 'ニックネームが入力されていません。<br>'; ←『'』シングルクォートに挟まれると文字列に。
21 }
22 else ←↑の条件に『合わなければ』↓の処理が行われ表示されることになる。
23 {
24 print 'ようこそ';
25 print $nickname;
26 print '様';
27 print '<br>';
28 }
29
30 if($email=='')
31 {
32 print 'メールアドレスが入力されていません。<br>';
33 }
34 else
35 {
36 print 'メールアドレス';
37 print $email;
38 print '<br>';
39 }
40
41 if($goiken=='')
42 {
43 print 'ご意見が入力されていません。<br>';
44 }
45 else
46 {
47 print 'ご意見『';
48 print $goiken;
49 print '』<br>';
50 }
51
52 if($nickname=='' || $email=='' || $goiken=='') ←『||』は『もしくは』という意味。変数$nicknameが空、もしくは変数$emailが空、もしくは変数$goikenが空 ならば、↓の処理が実行される。
53 {
54 print '<form>';
55 print '<input type="button" onclick="history.back()" value="戻る">'; ←JavaScript言語、入力し直しの仕組みに。HTMLだと入力した値(今回はテキスト)がページを「戻る」などの移動を行うことで消去してしまうが、JavaScriptならそれを保持して戻ることができるので、再入力の手間が省ける。つまり入力が一つでも行われていない場合は戻るリンクが出現し、再入力を促すということ。
56 print '</form>';
57 }
58 else ←入力が行われていた場合の処理。
59 {
60 print '<form method="post" action="thanks.php">'; ←送信先はthanks.php
61 print '<input name="nickname" type="hidden" value="'.$nickname.'">'; ←『hidden』はブラウザ上に表示されない非表示データを送り先の『$_POST=[''];』に渡すことができる。
『$_POST=[''];』これは本来『form』(index.html)タグ内の入力データ(inputタグ)を受け取るものだが、check.phpファイルには入力画面がない。しかしindex.htmlから送られてきた『nickname(名前と値)』を変数『$nickname』に代入してあるので、これを『value』に代入してやることで『nickname』になり『hidden』として送信先に渡すことができる。

62 print '<input name="email" type="hidden" value="'.$email.'">'; ←『. .』変数の値を連結する。
63 print '<input name="goiken" type="hidden" value="'.$goiken.'">';
64 print '<input type="button" onclick="history.back()" value="戻る">';
65 print '<input type="submit" value="OK">'; ←『submin』送信ボタンを作成。
66 print '</form>';
67 }
68 ?> ←「PHP」プログラム終了。
69 </body>
70 </html>

アンケートのサンクスページ。(thanks.php)

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>アンケートのサンクス</title>
</head>
<body>
<?php
$nickname=$_POST['nickname'];
$email=$_POST['email'];
$goiken=$_POST['goiken'];
$nickname=htmlspecialchars($nickname);
$email=htmlspecialchars($email);
$goiken=htmlspecialchars($goiken);
print $nickname;
print '様<br>';
print 'ご意見ありがとうございました。<br>';
print 'いただいたご意見';
print $goiken;
print '<br>';
print $email;
print 'にメールを送りましたのでご確認ください。';
$mail_sub='アンケート受け付けました。'; ←メールタイトル。
$mail_body=$nickname."様への\nアンケートご協力ありがとうございました。"; ←メール本文。ダブルクォーテーションは「\n」を改行として機能させるため。
$mail_body=html_entity_decode($mail_body,ENT_QUOTES,"UTF-8");
$mail_head='From:xxx@xxx.co.jp'; ← ヘッダー情報。自分のメールアドレス。
mb_language('Japanese');
mb_internal_encoding("UTF-8");
mb_send_mail($email,$mail_sub,$mail_body,$mail_head) ←メールを送信する命令。

※メールは実機ではないので出ない状態。

?>
</body>
</html>


「apache」と「PHP」の設定及び動作確認。 [PHP]

「apache」と「PHP」の設定及び動作確認。

■「apache」の設定。

       
[root@centos conf.d]# find / -name httpd.conf
/etc/httpd/conf/httpd.conf ←「apache」の設定ファイル。

[root@centos conf.d]# find / -name 10-php.conf
/etc/httpd/conf.modules.d/10-php.conf ←「PHP」の設定ファイル。

[root@centos conf.d]# find / -name php.conf
/etc/httpd/conf.d/php.conf ←「PHP」の設定ファイル。


[bibo-roku@centos conf]$ sudo vi httpd.conf
---省略---
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

Include /etc/httpd/conf.modules.d/10-php.conf ←一文追記。
Include /etc/httpd/conf.d/php.conf ←一文追記。
Include /etc/httpd/conf.d/*.conf ←一文追記。


DirectoryIndex index.html ←元文。
DirectoryIndex index.html index.htm index.cgi index.php ←追記後。

       
      
「apache」の設定ファイル→「/etc/httpd/conf/httpd.conf」
 に
「PHP」の設定ファイル→「/etc/httpd/conf.d/10-php.conf」「/etc/httpd/conf.d/php.conf」
 を読み込ませる必要があるとのこと。
 それぞれのファイルを確認してみると、「PHP」の設定ファイルの位置が当方の場所と異なるようです。
 環境の違いでそうなるのか、インストールの方法でそうなるのかよくわかりませんが、当方に合わせた設定をしていこうと思います。
「apache」の「/etc/httpd/conf/httpd.conf」に「PHP」の「/etc/httpd/conf.d/10-php.conf」と「/etc/httpd/conf.d/php.conf」を追記するとサイトにはあるのですが、当方と「10-php.conf」の位置が異なりますので修正してから追記しました。追記の場所って一番下で良いのでしょうかね。
 また、一番下の追記は、何か他のパッケージのコンフィグを「apache」が読み込む必要がある場合に必要らしいのですが、追記した上の段に「IncludeOptional conf.d/*.conf」というのがあるのですが、意味は違うのでしょうか。
 さらに「DirectoryIndex」を検索し「index.htm」「index.cgi」「index.php」を追記し、これらのファイルを許可します。

■「PHP」の設定。

[root@centos conf.d]# rpm -ql php56u
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.modules.d/10-php.conf
/usr/lib/httpd/modules/libphp5-zts.so
/usr/lib/httpd/modules/libphp5.so
/usr/share/httpd/icons/php.gif
/var/lib/php/session
/var/lib/php/wsdlcache


#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
# LoadModule php5_module modules/libphp5.so  ←コメントアウト。
LoadModule php5_module /usr/lib/httpd/modules/libphp5.so ←修正後。
</IfModule>

<IfModule !prefork.c>

# LoadModule php5_module modules/libphp5-zts.so  ←コメントアウト。

LoadModule php5_module /usr/lib/httpd/modules/libphp5-zts.so ←修正後。

</IfModule>

「PHP」の設定ファイル「/etc/httpd/conf.modules.d/10-php.conf」に書かれているモジュールのパスが実際の物とは異なるとのことで編集が必要とのことです。
 まずはインストールした実際のパスを「rpm -ql」コマンドで確認します。

■動作の確認。

       
[root@centos ~]# /etc/rc.d/init.d/httpd restart

[root@centos ~]# echo "<?php phpinfo(); ?>" > /var/www/html/info.php

http://192.168.0.66/info.php
php_info.png
       
      
 動作の確認をするために「apache」の再起動を行います。
「PHP」の動作確認をするための「info.php」を作成します。
 ブラウザで「http://www.ドメイン名/info.php」今回は「192.168.0.66/info.php」で確認できました。


「PHP5.6.4」のインストール。 [PHP]

「PHP5.6.4」のインストール。

■作成されたRPMファイルの確認。

       
[mockbuild@centos i386]$ ls
php56u-5.6.4-1.ius.el6.i386.rpm            php56u-mbstring-5.6.4-1.ius.el6.i386.rpm
php56u-bcmath-5.6.4-1.ius.el6.i386.rpm     php56u-mcrypt-5.6.4-1.ius.el6.i386.rpm
php56u-cli-5.6.4-1.ius.el6.i386.rpm        php56u-mssql-5.6.4-1.ius.el6.i386.rpm
php56u-common-5.6.4-1.ius.el6.i386.rpm     php56u-mysqlnd-5.6.4-1.ius.el6.i386.rpm
php56u-dba-5.6.4-1.ius.el6.i386.rpm        php56u-odbc-5.6.4-1.ius.el6.i386.rpm
php56u-dbg-5.6.4-1.ius.el6.i386.rpm        php56u-opcache-5.6.4-1.ius.el6.i386.rpm
php56u-devel-5.6.4-1.ius.el6.i386.rpm      php56u-pdo-5.6.4-1.ius.el6.i386.rpm
php56u-embedded-5.6.4-1.ius.el6.i386.rpm   php56u-pgsql-5.6.4-1.ius.el6.i386.rpm
php56u-enchant-5.6.4-1.ius.el6.i386.rpm    php56u-process-5.6.4-1.ius.el6.i386.rpm
php56u-fpm-5.6.4-1.ius.el6.i386.rpm        php56u-pspell-5.6.4-1.ius.el6.i386.rpm
php56u-gd-5.6.4-1.ius.el6.i386.rpm         php56u-recode-5.6.4-1.ius.el6.i386.rpm
php56u-gmp-5.6.4-1.ius.el6.i386.rpm        php56u-snmp-5.6.4-1.ius.el6.i386.rpm
php56u-imap-5.6.4-1.ius.el6.i386.rpm       php56u-soap-5.6.4-1.ius.el6.i386.rpm
php56u-interbase-5.6.4-1.ius.el6.i386.rpm  php56u-tidy-5.6.4-1.ius.el6.i386.rpm
php56u-intl-5.6.4-1.ius.el6.i386.rpm       php56u-xml-5.6.4-1.ius.el6.i386.rpm
php56u-ldap-5.6.4-1.ius.el6.i386.rpm       php56u-xmlrpc-5.6.4-1.ius.el6.i386.rpm
       
      
 /home/mockbuild/rpmbuild/RPMS/i386 に作成されました。

■「rpm」コマンドで依存関係を無視してインストールする。

       
[root@centos i386]# yum localinstall php56u-5.6.4-1.ius.el6.i386.rpm 
---省略---
php56u-5.6.4-1.ius.el6.i386.rpm を調べています: php56u-5.6.4-1.ius.el6.i386
php56u-5.6.4-1.ius.el6.i386.rpm をインストール済みとして設定しています
---省略---
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package php56u.i386 0:5.6.4-1.ius.el6 will be インストール
--> 依存性の処理をしています: php56u-cli(x86-32) = 5.6.4-1.ius.el6 のパッケージ: php56u-5.6.4-1.ius.el6.i386
--> 依存性の処理をしています: php56u-common(x86-32) = 5.6.4-1.ius.el6 のパッケージ: php56u-5.6.4-1.ius.el6.i386
--> 依存性解決を終了しました。
エラー: パッケージ: php56u-5.6.4-1.ius.el6.i386 (/php56u-5.6.4-1.ius.el6.i386)
             要求: php56u-cli(x86-32) = 5.6.4-1.ius.el6 ←必要パッケージ。
エラー: パッケージ: php56u-5.6.4-1.ius.el6.i386 (/php56u-5.6.4-1.ius.el6.i386)
             要求: php56u-common(x86-32) = 5.6.4-1.ius.el6 ←必要パッケージ。
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest
 
 
[root@centos i386]# yum localinstall php56u-5.6.4-1.ius.el6.i386.rpm php56u-cli-5.6.4-1.ius.el6.i386.rpm php56u-common-5.6.4-1.ius.el6.i386.rpm
---省略---
php56u-cli-5.6.4-1.ius.el6.i386.rpm を調べています: php56u-cli-5.6.4-1.ius.el6.i386
php56u-cli-5.6.4-1.ius.el6.i386.rpm をインストール済みとして設定しています
php56u-common-5.6.4-1.ius.el6.i386.rpm を調べています: php56u-common-5.6.4-1.ius.el6.i386php56u-common-5.6.4-1.ius.el6.i386.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package php56u.i386 0:5.6.4-1.ius.el6 will be インストール
---> Package php56u-cli.i386 0:5.6.4-1.ius.el6 will be インストール
---> Package php56u-common.i386 0:5.6.4-1.ius.el6 will be インストール
--> 依存性の処理をしています: php56u-pecl-jsonc(x86-32) のパッケージ: php56u-common-5.6.4-1.ius.el6.i386
--> 依存性解決を終了しました。
エラー: パッケージ: php56u-common-5.6.4-1.ius.el6.i386 (/php56u-common-5.6.4-1.ius.el6.i386)
             要求: php56u-pecl-jsonc(x86-32)
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest
 
 
[mockbuild@centos SOURCES]$ wget http://dl.iuscommunity.org/pub/ius/archive/CentOS/6/SRPMS/php56u-pecl-jsonc-1.3.6-3.ius.centos6.src.rpm


[mockbuild@centos SOURCES]$ rpmbuild --rebuild php56u-pecl-jsonc-1.3.6-3.ius.centos6.src.rpm 
php56u-pecl-jsonc-1.3.6-3.ius.centos6.src.rpm をインストール中です。
エラー: ビルド依存性の失敗:
        php56u-devel は php56u-pecl-jsonc-1.3.6-3.ius.el6.i386 に必要とされています
        php56u-pear は php56u-pecl-jsonc-1.3.6-3.ius.el6.i386 に必要とされています
        
        
[root@centos SOURCES]# wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/SRPMS/php56u-pear-1.9.5-1.ius.centos6.src.rpm

[mockbuild@centos SOURCES]$ rpmbuild --rebuild php56u-pear-1.9.5-1.ius.centos6.src.rpm 
php56u-pear-1.9.5-1.ius.centos6.src.rpm をインストール中です。
エラー: ビルド依存性の失敗:
        php56u-cli は php56u-pear-1:1.9.5-1.ius.el6.noarch に必要とされています
        php56u-xml は php56u-pear-1:1.9.5-1.ius.el6.noarch に必要とされています
        
        
[root@centos php56u]# yum localinstall php56u-cli-5.6.4-1.ius.el6.i386.rpm php56u-xml-5.6.4-1.ius.el6.i386.rpm
[root@centos php56u]# yum localinstall php56u-cli-5.6.4-1.ius.el6.i386.rpm php56u-xml-5.6.4-1.ius.el6.i386.rpm 
---省略---
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package php56u-cli.i386 0:5.6.4-1.ius.el6 will be インストール
--> 依存性の処理をしています: php56u-common(x86-32) = 5.6.4-1.ius.el6 のパッケージ: php56u-cli-5.6.4-1.ius.el6.i386
---> Package php56u-xml.i386 0:5.6.4-1.ius.el6 will be インストール
--> 依存性の処理をしています: php56u-common = 5.6.4-1.ius.el6 のパッケージ: php56u-xml-5.6.4-1.ius.el6.i386
--> 依存性解決を終了しました。
エラー: パッケージ: php56u-xml-5.6.4-1.ius.el6.i386 (/php56u-xml-5.6.4-1.ius.el6.i386)
             要求: php56u-common = 5.6.4-1.ius.el6
エラー: パッケージ: php56u-cli-5.6.4-1.ius.el6.i386 (/php56u-cli-5.6.4-1.ius.el6.i386)
             要求: php56u-common(x86-32) = 5.6.4-1.ius.el6
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest
 

[root@centos php56u]# rpm -Uvh --nodeps php56u-cli-5.6.4-1.ius.el6.i386.rpm php56u-xml-5.6.4-1.ius.el6.i386.rpm php56u-common-5.6.4-1.ius.el6.i386.rpm php56u-process-5.6.4-1.ius.el6.i386.rpm php56u-devel-5.6.4-1.ius.el6.i386.rpm 
準備中...                ########################################### [100%]
   1:php56u-common          ########################################### [ 20%]
   2:php56u-cli             ########################################### [ 40%]
   3:php56u-devel           ########################################### [ 60%]
   4:php56u-xml             ########################################### [ 80%]
   5:php56u-process         ########################################### [100%]
       
      
「rpmbuild」コマンドで作成した「RPMファイル」で「PHP5.6.4」をインストールします。
 サイトを見て回ると「rpm」コマンドでインストールしていることが多いように思いますが、「yum localinstall」コマンドでインストールしてみるもののエラーが発生しました。
要求: php56u-cli(x86-32) = 5.6.4-1.ius.el6
要求: php56u-common(x86-32) = 5.6.4-1.ius.el6
 これら要求されたパッケージを同時にインストールすれば良いのでは。
 しかしこれもエラー発生で
要求: php56u-pecl-jsonc(x86-32)
 を要求されたのですが、これはビルドしたファイル群には存在しません。
 どうしたらよいものかとインターネットを検索すると、これはダウンロードしてまたビルドするようですね。
 ということでアーカイブから
/home/mockbuild/rpmbuild/SOURCES
 にダウンロードし、「rpmbuild --rebuild」コマンドを実施します。が、
php56u-devel は php56u-pecl-jsonc-1.3.6-3.ius.el6.i386 に必要とされています
php56u-pear は php56u-pecl-jsonc-1.3.6-3.ius.el6.i386 に必要とされています
 ということで、「php56u-devel」「php56u-pear」をインストールしたいところですが後者がまたないので、SRPMをダウンロード、「rpmbuild --rebuild」コマンドを実施します。
 しかしまた
php56u-cli は php56u-pear-1:1.9.5-1.ius.el6.noarch に必要とされています
php56u-xml は php56u-pear-1:1.9.5-1.ius.el6.noarch に必要とされています
 ということなのですが、今回は「php56u-cli」「php56u-xml」もすでにありますのでまとめてインストールしてみます。
 しかしまたまたエラー発生です。というか
php56u-common → php56u-pecl-jsonc → php56u-pear → php56u-cli → php56u-common
 という形で依存関係が一周してしまいインストールが出来ません。調べてみるとこれらは依存関係を無視した形でインストールしてしまうようです。(yumの意味が……)
 結果としては、「rpm」コマンドで依存関係を無視する「--nodeps」オプションを付けてインストールします。

■ダウンロードしたソースパッケージをRPMファイルに。

       
[mockbuild@centos SOURCES]$ rpmbuild --rebuild --clean php56u-pear-1.9.5-1.ius.centos6.src.rpm

---省略---
書き込み完了: /home/mockbuild/rpmbuild/RPMS/noarch/php56u-pear-1.9.5-1.ius.el6.noarch.rpm
---省略---

[root@centos noarch]# yum localinstall php56u-pear-1.9.5-1.ius.el6.noarch.rpm
インストール:
---省略---
  php56u-pear.noarch 1:1.9.5-1.ius.el6                                                                    
完了しました!


[mockbuild@centos SOURCES]$ rpmbuild --rebuild --clean php56u-pecl-jsonc-1.3.6-3.ius.centos6.src.rpm

---省略---
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-pecl-jsonc-1.3.6-3.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-pecl-jsonc-devel-1.3.6-3.ius.el6.i386.rpm
---省略---

[root@centos i386]# yum localinstall php56u-pecl-jsonc-1.3.6-3.ius.el6.i386.rpm php56u-pecl-jsonc-devel-1.3.6-3.ius.el6.i386.rpm 

インストール:
  php56u-pecl-jsonc.i386 0:1.3.6-3.ius.el6         php56u-pecl-jsonc-devel.i386 0:1.3.6-3.ius.el6        
---省略---
完了しました!
       
      
 先にダウンロードしていた「php56u-pear」に「rpmbuild --rebuild」コマンドを実施します。
「/rpmbuild/RPMS/noarch」ディレクトリに出来るので注意します。
 そして「yum localinstall」でインストールします。
 同様に「php56u--pecl-jsonc」にも実施、インストールします。

■「PHP5.6.4」および必要なパッケージのインストール。

       
[root@centos php56u]# yum localinstall php56u-5.6.4-1.ius.el6.i386.rpm php56u-pdo-5.6.4-1.ius.el6.i386.rpm php56u-mysqlnd-5.6.4-1.ius.el6.i386.rpm

インストール:
  php56u.i386 0:5.6.4-1.ius.el6  php56u-mysqlnd.i386 0:5.6.4-1.ius.el6  php56u-pdo.i386 0:5.6.4-1.ius.el6 
完了しました!
       
      
「PHP5.6.4」と「MySQL(当方はMariaDBにしますが)」に接続するために必要だという「PDOモジュール」と「mysqlndモジュール」もインストールします。
 これでとりあえず「PHP」のインストールは終わったのかな?


SPECファイルからPHP5.6.4のRPMをビルドする。 [PHP]

SPECファイルからPHP5.6.4のRPMをビルドする。

■結論。

       
「SPECファイルの編集」
%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_sbindir}/apxs}} 修正前

%{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_bindir}/apxs}} 修正後


[bibo-roku@centos ~]$ sudo yum install --enablerepo=epel bzip2-devel curl-devel pam-devel openssl-devel sqlite-devel zlib-devel libedit-devel pcre-devel libtool libtool-ltdl-devel systemtap-sdt-devel krb5-devel libc-client-devel postgresql-devel unixODBC-devel libxml2-devel firebird-devel net-snmp-devel libxslt-devel libxml2-devel t1lib-devel libjpeg-devel libpng-devel freetype-devel libXpm-devel libvpx-devel gmp-devel tokyocabinet-devel libmcrypt-devel libtidy-devel freetds-devel aspell-devel recode-devel libicu-devel enchant-devel
「rpmbuild」コマンドをインストールするときに。
---省略---

[bibo-roku@centos ~]$ sudo yum install --enablerepo=epel re2c bison
 初回の「rpmbuild -bb --clean php56u.spec」にエラー発生するときに。
---省略---

[root@centos ~]# yum list installed --enablerepo=epel apr-devel apr-util-devel
「No such file or directory at /usr/bin/apxs line 214.」および「apxs:Error: /usr/bin/apu-1-config not found!.」の対処に。
---省略---

[mockbuild@centos SPECS]$ rpmbuild -bb --clean php56u.spec
---省略---
       
      
「Wordpress」をインストールするため、「CentOS_6.6」に「yum(IUS)」経由で「apache 2.4.12」をインストールしてある仮想PCに、「PHP」をインストールします。
 最新版(5.6.8)を「yum」でインストールしたかったのですが、当方のスキルでは無理でしたので、「rpmbuild」コマンドにて「RPMファイル」をビルドすることにしました。
「apache 2.4.12」に対応する「PHP」のバージョンは「SPECファイル」を調べると、「5.5.20」および「5.6.4」であるように思います。
 ビルドするために非常に時間がかかり、長く、時には不要だった対処を記したこの下の記事は、次の失敗の役に立つかも知れないのでこのまま記載しておきます。

 しかし全部読むのが面倒な場合、直ぐに再現できるよう簡潔なこの記事を一番上に用意しておきます。
 当方の環境では上記の「SPECファイル」の編集と不足分のインストールでビルドが完了しました。
 経緯や少し詳細な情報は前日分の記事や、この下の記事を見れば解ります。

■SPECファイルを用いてRPMファイルをビルドする準備。

       
[mockbuild@centos 564]$ ls
php56u-5.6.4-1.ius.centos6.src.rpm  php56u.spec

[mockbuild@centos 564]$ rm php56u.spec ←「SPECファイル」を消去。

[mockbuild@centos 564]$ mv php56u-5.6.4-1.ius.centos6.src.rpm /home/mockbuild/rpmbuild/SOURCES/ ←ソースパッケージを移動。
       
[mockbuild@centos SOURCES]$ rpm2cpio php56u-5.6.4-1.ius.centos6.src.rpm | cpio -id ←ソースパッケージを展開。

[mockbuild@centos SOURCES]$ ls
macros.php                     php-5.4.7-odbctimer.patch  php-fpm.logrotate
opcache-default.blacklist      php-5.4.8-ldap_r.patch     php-fpm.service
opcache.ini                    php-5.4.9-fixheader.patch  php-fpm.sysconfig
php-5.2.0-includedir.patch     php-5.4.9-phpinfo.patch    php.conf
php-5.2.4-embed.patch          php-5.6.0-noNO.patch       php.ini
php-5.3.0-recode.patch         php-5.6.0-oldpcre.patch    php.modconf
php-5.3.1-systzdata-v10.patch  php-5.6.4-strip.tar.xz     php.ztsmodconf
php-5.4.0-dlopen.patch         php-fpm-www.conf           php56u-5.6.4-1.ius.centos6.src.rpm
php-5.4.0-phpize.patch         php-fpm.conf               php56u.spec
php-5.4.7-libdb.patch          php-fpm.init               strip.sh
       
[mockbuild@centos SOURCES]$ mv php56u.spec ../SPECS/ ←「SPECファイル」を移動。

[mockbuild@centos SPECS]$ vi php56u.spec ←「SPECファイル」を編集。
 %{!?_httpd_apxs:       %{expand: %%global _httpd_apxs       %%{_sbindir}/apxs}} ←{_sbindir}を{_bindir}に編集。

[mockbuild@centos SPECS]$ rpmbuild -bb --clean php56u.spec 
エラー: ビルド依存性の失敗:
        bzip2-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        curl-devel >= 7.9 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        pam-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        openssl-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        sqlite-devel >= 3.6.0 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        zlib-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libedit-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        pcre-devel >= 6.6 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libtool >= 1.4.3 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libtool-ltdl-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        systemtap-sdt-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        krb5-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libc-client-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        postgresql-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        unixODBC-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libxml2-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        firebird-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        net-snmp-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libxslt-devel >= 1.0.18-1 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libxml2-devel >= 2.4.14-1 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        t1lib-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libjpeg-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libpng-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        freetype-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libXpm-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libvpx-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        gmp-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        tokyocabinet-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libmcrypt-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libtidy-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        freetds-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        aspell-devel >= 0.50.0 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        recode-devel は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        libicu-devel >= 4.0 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        enchant-devel >= 1.2.4 は php56u-5.6.4-1.ius.el6.i386 に必要とされています
        
[bibo-roku@centos ~]$ sudo yum install --enablerepo=epel bzip2-devel curl-devel pam-devel openssl-devel sqlite-devel zlib-devel libedit-devel pcre-devel libtool libtool-ltdl-devel systemtap-sdt-devel krb5-devel libc-client-devel postgresql-devel unixODBC-devel libxml2-devel firebird-devel net-snmp-devel libxslt-devel libxml2-devel t1lib-devel libjpeg-devel libpng-devel freetype-devel libXpm-devel libvpx-devel gmp-devel tokyocabinet-devel libmcrypt-devel libtidy-devel freetds-devel aspell-devel recode-devel libicu-devel enchant-devel

インストール:
aspell-devel.i686 12:0.60.6-12.el6
bzip2-devel.i686 0:1.0.5-7.el6_0
enchant-devel.i686 1:1.5.0-4.el6
firebird-devel.i686 0:2.5.4.26856.0-1.el6
freetds-devel.i686 0:0.91-2.el6
freetype-devel.i686 0:2.3.11-15.el6_6.1
gmp-devel.i686 0:4.3.1-7.el6_2.2
krb5-devel.i686 0:1.10.3-37.el6_6
libXpm-devel.i686 0:3.5.10-2.el6
libc-client-devel.i686 0:2007e-11.el6
libcurl-devel.i686 0:7.19.7-40.el6_6.4
libedit-devel.i686 0:2.11-4.20080712cvs.1.el6
libicu-devel.i686 0:4.2.1-9.1.el6_2
libjpeg-turbo-devel.i686 0:1.2.1-3.el6_5
libmcrypt-devel.i686 0:2.5.8-9.el6
libpng-devel.i686 2:1.2.49-1.el6_2
libtidy-devel.i686 0:0.99.0-19.20070615.1.el6
libtool.i686 0:2.2.6-15.5.el6
libtool-ltdl-devel.i686 0:2.2.6-15.5.el6
libvpx-devel.i686 0:1.3.0-5.el6_5
libxml2-devel.i686 0:2.7.6-17.el6_6.1
libxslt-devel.i686 0:1.1.26-2.el6_3.1
net-snmp-devel.i686 1:5.5-50.el6_6.1
openssl-devel.i686 0:1.0.1e-30.el6.8
pam-devel.i686 0:1.1.1-20.el6
pcre-devel.i686 0:7.8-6.el6
postgresql-devel.i686 0:8.4.20-2.el6_6
recode-devel.i686 0:3.6-28.1.el6
sqlite-devel.i686 0:3.6.20-1.el6
systemtap-sdt-devel.i686 0:2.5-5.el6
t1lib-devel.i686 0:5.1.2-6.el6_2.1
tokyocabinet-devel.i686 0:1.4.33-6.el6
unixODBC-devel.i686 0:2.2.14-14.el6
zlib-devel.i686 0:1.2.3-29.el6

依存性関連をインストールしました:
aspell.i686 12:0.60.6-12.el6
autoconf.noarch 0:2.63-5.1.el6
automake.noarch 0:1.11.1-4.el6
elfutils-devel.i686 0:0.158-3.2.el6
elfutils-libelf-devel.i686 0:0.158-3.2.el6
enchant.i686 1:1.5.0-4.el6
file-devel.i686 0:5.04-21.el6
firebird-libfbclient.i686 0:2.5.4.26856.0-1.el6
firebird-libfbembed.i686 0:2.5.4.26856.0-1.el6
freetds.i686 0:0.91-2.el6
glib2-devel.i686 0:2.28.8-4.el6
keyutils-libs-devel.i686 0:1.4-5.el6
libX11-devel.i686 0:1.6.0-2.2.el6
libXau-devel.i686 0:1.0.6-4.el6
libXpm.i686 0:3.5.10-2.el6
libc-client.i686 0:2007e-11.el6
libcom_err-devel.i686 0:1.41.12-21.el6
libgcrypt-devel.i686 0:1.4.5-11.el6_4
libgpg-error-devel.i686 0:1.7-4.el6
libicu.i686 0:4.2.1-9.1.el6_2
libidn-devel.i686 0:1.18-2.el6
libmcrypt.i686 0:2.5.8-9.el6
libselinux-devel.i686 0:2.0.94-5.8.el6
libsepol-devel.i686 0:2.0.41-4.el6
libtidy.i686 0:0.99.0-19.20070615.1.el6
libvpx.i686 0:1.3.0-5.el6_5
libxcb-devel.i686 0:1.9.1-2.el6
lm_sensors-devel.i686 0:3.1.1-17.el6
lm_sensors-libs.i686 0:3.1.1-17.el6
ncurses-devel.i686 0:5.7-3.20090208.el6
net-snmp-libs.i686 1:5.5-50.el6_6.1
popt-devel.i686 0:1.13-7.el6
postgresql.i686 0:8.4.20-2.el6_6
postgresql-libs.i686 0:8.4.20-2.el6_6
recode.i686 0:3.6-28.1.el6
rpm-devel.i686 0:4.8.0-38.el6_6
t1lib.i686 0:5.1.2-6.el6_2.1
tcp_wrappers-devel.i686 0:7.6-57.el6
tokyocabinet.i686 0:1.4.33-6.el6
unixODBC.i686 0:2.2.14-14.el6
xorg-x11-proto-devel.noarch 0:7.7-9.el6                                                
完了しました!
       
      
 前項目で取り出して置いた「SPECファイル」「php56u.spec」を消去します。
 ソースパッケージ「php56u-5.6.4-1.ius.centos6.src.rpm」を「SOURCES」ディレクトリに移動します。
 ソースパッケージを「rpm2cpio | cpio -id」コマンドにて展開します。
 現れた「SPECファイル」「php56u.spec」を「SPECS」ディレクトリに移動し、「vi」コマンドで編集します。
 {_sbindir}を{_bindir}にして保存します。
「rpmbuild」コマンドの「-bb」オプションにて「SPECファイル」から「RPMパッケージ」を作成します。エラーになります。
 要求されたパッケージ類を「mockbuild」ユーザーから「bibo-roku」ユーザーに戻り全てインストールします。

■SPECファイルを用いてにRPMをビルドする。失敗。エラーについて調べる。

       
[mockbuild@centos SPECS]$ rpmbuild -bb --clean php56u.spec
---省略---
+ ./configure --host=i686-redhat-linux-gnu --build=i686-redhat-linux-gnu --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --cache-file=../config.cache --with-libdir=lib --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --disable-debug --with-pic --disable-rpath --without-pear --with-exec-dir=/usr/bin --with-freetype-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr --with-vpx-dir=/usr --enable-gd-native-ttf --with-t1lib=/usr --without-gdbm --with-jpeg-dir=/usr --with-openssl --with-pcre-regex --with-zlib --with-layout=GNU --with-kerberos --with-libxml-dir=/usr --with-system-tzdata --with-mhash --enable-dtrace --with-apxs2=/usr/bin/apxs --libdir=/usr/lib/php --without-mysql --disable-pdo --without-gd --disable-dom --disable-dba --without-unixODBC --disable-opcache --disable-xmlreader --disable-xmlwriter --without-sqlite3 --disable-phar --disable-fileinfo --without-pspell --disable-wddx --without-curl --disable-posix --disable-xml --disable-simplexml --disable-exif --without-gettext --without-iconv --disable-ftp --without-bz2 --disable-ctype --disable-shmop --disable-sockets --disable-tokenizer --disable-sysvmsg --disable-sysvshm --disable-sysvsem

configure: WARNING: unrecognized options: --with-exec-dir ←確認。
configure: loading cache ../config.cache
checking for grep that handles long lines and -e... (cached) /bin/grep
checking for egrep... (cached) /bin/grep -E
checking for a sed that does not truncate output... (cached) /bin/sed
checking build system type... (cached) i686-redhat-linux-gnu
checking host system type... (cached) i686-redhat-linux-gnu
checking target system type... (cached) i686-redhat-linux-gnu
checking for i686-redhat-linux-gnu-cc... no
checking for i686-redhat-linux-gnu-gcc... no
checking for cc... (cached) cc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables... 
checking for suffix of object files... (cached) o
checking whether we are using the GNU C compiler... (cached) yes
checking whether cc accepts -g... (cached) yes
checking for cc option to accept ISO C89... (cached) none needed
checking how to run the C preprocessor... (cached) cc -E
checking for icc... no
checking for suncc... no
checking whether cc understands -c and -o together... (cached) yes
checking how to run the C preprocessor... cc -E
checking for ANSI C header files... (cached) yes
checking for sys/types.h... (cached) yes
checking for sys/stat.h... (cached) yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking for memory.h... (cached) yes
checking for strings.h... (cached) yes
checking for inttypes.h... (cached) yes
checking for stdint.h... (cached) yes
checking for unistd.h... (cached) yes
checking for minix/config.h... (cached) no
checking whether it is safe to define __EXTENSIONS__... (cached) yes
checking whether ln -s works... yes
checking for system library directory... lib
checking whether to enable runpaths... no
checking if compiler supports -R... (cached) no
checking if compiler supports -Wl,-rpath,... (cached) yes
checking for gawk... (cached) gawk
checking for bison... no ←確認。
checking for byacc... no
checking for bison version... (cached) invalid ←確認。
configure: WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: none, min: 204, excluded: 3.0). ←確認。
checking for re2c... no ←確認。
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers. ←確認。
checking whether to enable computed goto gcc extension with re2c... no
checking whether to force non-PIC code in shared modules... no
checking whether /dev/urandom exists... yes
checking for pthreads_cflags... (cached) -pthread
checking for pthreads_lib... (cached) 

Configuring SAPI modules
checking for AOLserver support... no
checking for Apache 1.x module support via DSO through APXS... no
checking for Apache 1.x module support... no
checking whether to enable Apache charset compatibility option... no
checking for Apache 2.0 filter-module support via DSO through APXS... no
checking for Apache 2.0 handler-module support via DSO through APXS... 

Sorry, I cannot run apxs.  Possible reasons follow:

1. Perl is not installed
2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs
3. Apache was not built using --enable-so (the apxs usage page is displayed)

The output of /usr/bin/apxs follows:
cannot open /httpd/build/config_vars.mk: No such file or directory at /usr/bin/apxs line 214.
configure: error: Aborting
エラー: /var/tmp/rpm-tmp.Ul67CP の不正な終了ステータス (%build)


RPM ビルドエラー:
    /var/tmp/rpm-tmp.Ul67CP の不正な終了ステータス (%build)
       
      
 ビルドは失敗してしまいました。ログは長いので、切りの良さそうなところから見てみると、「WARNING:」の文字が3つ見えます。
「WARNING: unrecognized options: --with-exec-dir」
「 WARNING: This bison version is not supported for regeneration of the Zend/PHP parsers (found: none, min: 204, excluded: 3.0).」
「WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.」
 調べながら対処していきます。

■「--with-exec-dir」の対処。

       
[mockbuild@centos SPECS]$ vi php56u.spec ←「--with-exec-dir」を検索。
---抜粋---
    --with-exec-dir=%{_bindir} \
    
       
      
---追記---
 下記の対処は
[root@centos ~]# yum install --enablerepo=epel apr-devel apr-util-devel
 をインストールすることにより、発生はするがそのままビルドできましたので、不要な対処でした。
 ただ削除すれば警告も出なくなりました。
---追記終わり---

「WARNING: unrecognized options: --with-exec-dir」についての対処です。
 警告文の直ぐ上の「./configure」に「--」オプションが沢山ついているのですが、ここに「 --with-exec-dir=/usr/bin」とありますね。
 インターネットで検索してみると公式HPに記載がありました。
「 --with-exec-dir[=DIR]  セーフモード時には、このディレクトリにある実行ファイルのみ実行を許可します。 デフォルト値は /usr/local/php/bin です。 」
 また「警告 この機能は PHP 5.3.0 で 非推奨となり、 PHP 5.4.0 で削除されました。」とあります。
「5.6系」のインストールですから、このオプションを追加しなければ良いんでしょうかね。消去して保存します。

■「bison」と「re2c」の対処。

       
[bibo-roku@centos ~]$ sudo yum list installed | grep bison
[bibo-roku@centos ~]$ sudo yum list installed | grep bison*
[bibo-roku@centos ~]$ sudo yum list installed | grep *bison
[bibo-roku@centos ~]$ sudo yum provides bison
---省略---
bison-2.4.1-5.el6.i686 : A GNU general-purpose parser generator
リポジトリー        : base
一致          :

[bibo-roku@centos ~]$ sudo yum install bison
---省略---
インストール:
  bison.i686 0:2.4.1-5.el6                                                               
完了しました!

[bibo-roku@centos ~]$ sudo yum list installed | grep re2c
[bibo-roku@centos ~]$ sudo yum list installed | grep re2c*
libfprint.i686                       0.1.0-19.pre2.el6    @base
[bibo-roku@centos ~]$ sudo yum list installed | grep *re2c
[bibo-roku@centos ~]$ sudo yum provides --enablerepo=epel re2c
---省略---
re2c-0.13.5-1.el6.i686 : Tool for generating C-based recognizers from regular expressionsリポジトリー        : epel
一致          :

[bibo-roku@centos ~]$ sudo yum install --enablerepo=epel re2c
---省略---
インストール:
  re2c.i686 0:0.13.5-1.el6                                                               
完了しました!

[mockbuild@centos SPECS]$ rpmbuild -bb --clean php56u.spec
       
      
 上の項目で着目した警告文への対処が正しいか、必要なファイル(?)を確認インストールしてみます。
 まずは「bison」について調べてみます。コマンド「yum list installed」でインストールされているか確認するも返答無しなので、インストールしていないようです。
 インストールするためにコマンド「yum provides」を使用して確認すると、リポジトリID「base」で単体でインストールできるようです。
 次にインターネットで調べてみると「通常パッケージのbisonを使うとconfigure時に警告が表示されるためサポートされているbisonを一時的に使用します。」とありました。一時的にと言うのはインストール時だけを指すそうですが、PHPをインストールした後はアンインストールするのでしょうか。

 次に「re2c」についても同様の作業を実施します。
 インターネットの情報で「bison」と同じでした。
 全てのエラーを解決したわけでは無いのですが、とりあえず「インストール」という形で解決できるのでは無いかと思われるものだけを対処して、再度ビルドしてみてどの様な結果がでるか確認してみます。
 結果「WARNING」は消えました! が、エラーが残っています。

■残りのエラー。

       
Sorry, I cannot run apxs.  Possible reasons follow:

1. Perl is not installed
2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs
3. Apache was not built using --enable-so (the apxs usage page is displayed)

The output of /usr/bin/apxs follows:
cannot open /httpd/build/config_vars.mk: No such file or directory at /usr/bin/apxs line 214.
configure: error: Aborting
       
      
---追記---
 下記の対処は
[root@centos ~]# yum install --enablerepo=epel apr-devel apr-util-devel
 をインストールすることにより、発生しなくなりました。不要な対処でした。
---追記終わり---

 残ったエラーについて把握してみます。
 1「perl」がインストールされいない。
 2「apxs」が見つからない。パスが間違えているのでは無いか。
 3「apache」のビルドに「--enable-so」が行われていないのでは無いか。
 「/httpd/build/config_vars.mk」が開けない。

■残りのエラー「perl」の確認。

       
[bibo-roku@centos ~]$ sudo yum list installed perl ←インストールの確認。
---省略---
インストール済みパッケージ
perl.i686 4:5.10.1-136.el6_6.1 @updates


       
      
 1については、「perl」のインストールを確認してみました。インストール済みでした。

■残りのエラー「apxs」の確認。

       
[bibo-roku@centos ~]$ sudo yum provides --enablerepo=epel *bin/apxs
---省略---
httpd-devel-2.2.15-39.el6.centos.i686 : Development interfaces for the Apache HTTP server
リポジトリー        : base
一致          :
ファイル名    : /usr/sbin/apxs

httpd24u-devel-2.4.12-5.ius.centos6.i686 : Development interfaces for the Apache HTTP server
リポジトリー        : installed
一致          :
ファイル名    : /usr/bin/apxs ←場所確認。

[bibo-roku@centos ~]$ sudo yum list installed httpd24u-devel
---省略---
インストール済みパッケージ
httpd24u-devel.i686      2.4.12-5.ius.centos6     @ius

[mockbuild@centos SPECS]$ vi php56u.spec
---省略---
# Build Apache module, and the CLI SAPI, /usr/bin/php
pushd build-apache
build --with-apxs2=%{_httpd_apxs} \ ←編集しコメントアウト。
      --with-apxs2=/usr/bin \ ←編集後。
      --libdir=%{_libdir}/php \
      --without-mysql \
      --disable-pdo \
      ${without_shared}
---省略---
# Build a special thread-safe Apache SAPI
pushd build-zts
build --with-apxs2=%{_httpd_apxs} \  ←編集しコメントアウト。
      --with-apxs2=/usr/bin \ ←編集後。
      --includedir=%{_includedir}/php-zts \
      --libdir=%{_libdir}/php-zts \
      --enable-maintainer-zts \
      --with-config-file-scan-dir=%{_sysconfdir}/php-zts.d \
      --without-mysql \
      --disable-pdo \
      ${without_shared}


      --with-apxs2=/usr/bin \
      --with-apxs2filter=/usr/bin \ ←追記。


[bibo-roku@centos bin]$ sudo vi apxs
my $installbuilddir = $libdir . "/httpd/build"; ←編集。
my $installbuilddir = $libdir . "/usr/lib/httpd/build"; ←編集後。
       
      
 2については、「apxs」が見つからない。とのことなのですが、「/usr/bin」にありましたので、パスの設定が問題なのでは。
 ネットで調べてみますと「apxsが存在するのにエラーとなっている場合は直接パスを --with-apxs2=/usr/sbin のように指定します。」とのこと。二ヶ所修正しました。
 さらに「Apache2のバージョンによっては--with-apxs2とするとエラーが発生してしまい、--with-apxs2filterと変更するとうまく行くことがあります。」ともあり、これも試します。
 3については、「apache」のインストール時の設定だと思うので、インストール済みの今回はパスしておきます。
 次の「cannot open /httpd/build/config_vars.mk No such file or directory at /usr/bin/apxs line 214.」ですが、パスが「/usr/bin/apxs」と「sbin」ではありません。先の変更と実際のパスと合っています。
「cannot open /httpd/build/config_vars.mk」は読んだとおりですが、実際のパスは「/usr/lib/httpd/build/config_vars.mk」なので、修正をしてみます。

■「Cannot open /httpd/build/config_vars.mk No such file or directory at /usr/bin/apxs line 214.」の対処。

       
[mockbuild@centos bin]$ vi apxs 
---省略---
sub get_config_vars{
    my ($file, $rh_config) = @_;

    open IN, $file or die "cannot open $file: $!";
    while (){
        if (/^\s*(.*?)\s*=\s*(.*)$/){
            $rh_config->{$1} = $2;
        }
    }
    close IN;
}
---省略---

「$file」検索
sub get_config_vars{
my ($file, $rh_config) = @_;

---省略---
「get_config_vars」検索
get_config_vars("$installbuilddir/config_vars.mk",\%config_vars);


---省略---
「$installbuilddir」検索
 my $installbuilddir = $libdir . "/httpd/build";

---省略---
「$libdir」検索 
my $libdir = `pkg-config --variable=libdir apr-1`;

[root@centos ~]# yum provides apr-1.pc
---省略---
警告: yum のバージョン 3.0.x は、誤ってファイル名に対して一致するでしょう。
その振る舞いをするには「*/apr-1.pc」もしくは「*bin/apr-1.pc」が使用できます。
No Matches found

[root@centos ~]# yum provides */apr-1.pc
---省略---
apr-devel-1.3.9-5.el6_2.i686 : APR library development kit
リポジトリー        : base
一致          :
ファイル名    : /usr/lib/pkgconfig/apr-1.pc

[root@centos ~]# yum list installed | grep apr-devel
[root@centos ~]# yum list installed --enablerepo=epel apr-devel
---省略---
エラー: 表示するパッケージはありません

[root@centos ~]# yum install --enablerepo=epel apr-devel
インストール:
  apr-devel.i686 0:1.3.9-5.el6_2                                                                                                  
依存性関連をインストールしました:
  apr.i686 0:1.3.9-5.el6_2                                                                                                        
完了しました!

[root@centos ~]# find / -name apr-1.pc
/usr/lib/pkgconfig/apr-1.pc ←確認。
       
      
 まず開けないという「/httpd/build/config_vars.mk」を探してみると「/usr/lib/httpd/build/config_vars.mk」に存在しました。
 そもそも記述の仕方が相対パスみたいですが……。
 次に「No such file or directory at /usr/bin/apxs line 214.」と具体的な指摘があります。「apxs」を「vi」で開き214行目を確認します。
 さっぱりわからない内容ですが「cannot open」だけ確認できます。
 仕方ないので「変数」を検索しまくります。「$file」を検索すると210行目辺りに「get_config_vars」という解りやすい名前を発見しました。これを検索します。
 40行あたりに
「get_config_vars("$installbuilddir/config_vars.mk",\%config_vars);」  とありました。
「$installbuilddir」を検索すると
「 my $installbuilddir = $libdir . "/httpd/build";」
「$libdir」検索 を検索すると
「my $libdir = `pkg-config --variable=libdir apr-1`;」
「apr-1」インターネットで検索すると、「/usr/lib64/pkgconfig に apr-1 な設定ファイルが存在しないため、設定が読めず。」とありました。
 当方は64ビットマシンではありませんが、「apr-1.pc」とやらが必要らしいので、まずはOS内を検索しますがヒットしませんでした。 「yum provides」で調べますと「apr-devel-1.3.9-5.el6_2.i686」に含まれるようなのでインストールします。

■新たなエラーの確認。と対処。

       
[mockbuild@centos SPECS]$ rpmbuild -bb --clean php56u.spec

The output of /usr/bin/apxs follows:
-02 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwide-tables
apxs:Error: /usr/bin/apu-1-config not found!.
configure: error: Aborting
エラー: /var/tmp/rpm-tmp.yvQV6w の不正な終了ステータス (%build)


RPM ビルドエラー:
    /var/tmp/rpm-tmp.yvQV6w の不正な終了ステータス (%build)
    
    
[root@centos ~]# find / -name "apu*"
/usr/include/apr15u-1/apu_version.h
/usr/include/apr15u-1/apu_want.h
/usr/include/apr15u-1/apu.h
/usr/include/apr15u-1/apu_errno.h
/usr/bin/apu15u-1-config ←非常に似ているファイル。

[root@centos bin]# ls
apr-1-config
apr15u-1-config
apu15u-1-config
apxs

[root@centos bin]# yum provides */apu-1-config
---省略---
apr-util-devel-1.3.9-3.el6_0.1.i686 : APR utility library development kit
リポジトリー        : base
一致          :
ファイル名    : /usr/bin/apu-1-config

[root@centos bin]# yum install apr-util-devel
---省略---
インストール:
  apr-util-devel.i686 0:1.3.9-3.el6_0.1                                                                   
依存性関連をインストールしました:
  apr-util.i686 0:1.3.9-3.el6_0.1                                                                         
完了しました!

[mockbuild@centos SPECS]$ rpmbuild -bb --clean php56u.spec
       
      
 各対処を終えたので、再び「SPECファイル」から「RPMファイル」をビルドします。
 再度エラー発生。「apxs:Error: /usr/bin/apu-1-config not found!.」これが解りやすそうなのでファイルをCentOS内で検索してみます。
 非常に似ている名前のファイルを発見。ファイル名を変更して良いものなのか……。 「ls」コマンドでファイルを見ているとやはり追加でインストールすれば良いのでしょうか。
 インストールして再度ビルドします。

■「SPECファイル」から「RPMファイル」をビルドする。

       
[mockbuild@centos SPECS]$ rpmbuild -bb --clean php56u.spec
伸張ファイルの検査中: /usr/lib/rpm/check-files /home/mockbuild/rpmbuild/BUILDROOT/php56u-5.6.4-1.ius.el6.i386
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-cli-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-dbg-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-fpm-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-common-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-devel-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-opcache-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-imap-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-ldap-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-pdo-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-mysqlnd-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-pgsql-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-process-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-odbc-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-soap-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-interbase-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-snmp-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-xml-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-xmlrpc-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-mbstring-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-gd-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-bcmath-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-gmp-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-dba-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-mcrypt-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-tidy-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-mssql-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-embedded-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-pspell-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-recode-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-intl-5.6.4-1.ius.el6.i386.rpm
書き込み完了: /home/mockbuild/rpmbuild/RPMS/i386/php56u-enchant-5.6.4-1.ius.el6.i386.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.PCM81O
+ umask 022
+ cd /home/mockbuild/rpmbuild/BUILD
+ cd php-5.6.4
+ /bin/rm -rf /home/mockbuild/rpmbuild/BUILDROOT/php56u-5.6.4-1.ius.el6.i386
+ exit 0
実行中(--clean): /bin/sh -e /var/tmp/rpm-tmp.dnMOep
+ umask 022
+ cd /home/mockbuild/rpmbuild/BUILD
+ rm -rf php-5.6.4
+ exit 0
       
      
 今までのようなエラーは発生しませんでした!
 ただ省略しましたが、「Conflicts: php-enchant < 5.6」やらが沢山あったのでそれが悪いことなのかよくわかりません。
 また、これまでのエラーに対処した方法が全て正しいのかも調べなくてはと思っています。
 基本的にはエラーの原因はビルドに必要な物がインストールされていないことが原因であったことが多いような気がします。
 なので、修正した「SPECファイル」等をデフォルトに戻してからもう一度リビルドしてみようかと思います。(えらく時間がかかりますが……。)


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。