質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

FreeBSD

FreeBSDは、Unix系のオープンソースのOSです。PC/AT互換機用ですが、他のプラットフォームにも移植されています。優れたネットワーク・セキュリティ・ストレージ機能で人気のOSです。ソースコードと共に無償で公開されており、多くの コミュニティによって長年に渡って開発されています。

Q&A

解決済

2回答

4251閲覧

FreeBSD上でCakePHPを構築した際,PHP PDO not found エラーが出ます.

yamadoc

総合スコア26

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

FreeBSD

FreeBSDは、Unix系のオープンソースのOSです。PC/AT互換機用ですが、他のプラットフォームにも移植されています。優れたネットワーク・セキュリティ・ストレージ機能で人気のOSです。ソースコードと共に無償で公開されており、多くの コミュニティによって長年に渡って開発されています。

0グッド

0クリップ

投稿2016/10/25 06:18

編集2016/10/25 07:39

現在,FreeBSD上にCakePHPを構築している作業を行っているのですが,
以下のようなエラーが出て困っています.

Fatal Error
Error: Class 'PDO' not found
File: APP_DIR/Vendor/cakephp/cakephp/lib/Cake/Model/Datasource/Database/Mysql.php
Line: 210

Notice: If you want to customize this error message, create sample/View/Errors/fatal_error.ctp

実際には,下記の通り,PHP PDOモジュールをインストール済みで,何故うまくいかないのか全くわかりません.

php -v

PHP 5.6.27 (cli) (built: Oct 25 2016 14:58:01) (DEBUG)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

php -m

[PHP Modules]

mysql
mysqli
mysqlnd
openssl
pcre
PDO
pdo_dblib
PDO_Firebird
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite

sqlite3

Zend OPcache

[Zend Modules]
Zend OPcache

test.php として下記のファイルを用意してブラウザからアクセスしたのですが,
どうやらインストールできていないようですが,ターミナル上では問題ないようです.

1 <?php 2 if (class_exists('PDO')) { 3 print "PDO is installed"; 4 } else { 5 print "PDO NOT installed"; 6 } 7 8 phpinfo(); 9 ?>
PDO NOT installed

php test.php

PDO is installed

お手数をおかけいたしますが,どうぞよろしくお願いいたします.

以下,追記です.

reboot

して,システムを再起動しました.

test.php をブラウザから見た結果のBuild Date に着目したところ,
Oct 22 2016 01:28:27

なのに対し,

php test.php

では,Build Dateは以下の通りとなりました.
Build Date => Oct 25 2016 14:57:52

バージョンが同じ異なる二つのPHPが混在しているのでしょうか.
ターミナル上
PHP Version => 5.6.27
ブラウザ上
PHP Version 5.6.27

再び,追記です.
そもそも,CakePHPの2.8.9とPHP5.6の相性が悪いといった事実はありますでしょうか.
当方が調べた限り,あまり関係がなさそうに見えました.

phpinfo() の実行結果を,ターミナル上,ブラウザ上に分けてご報告いたします.

まず,Additional .ini files parsed について
この項目は両者とも一致いたしました.

ターミナル上

php test.php | grep -i PDO

PDO is installedphpinfo()
/usr/local/etc/php/ext-20-pdo.ini,
/usr/local/etc/php/ext-30-pdo_dblib.ini,
/usr/local/etc/php/ext-30-pdo_firebird.ini,
/usr/local/etc/php/ext-30-pdo_mysql.ini,
/usr/local/etc/php/ext-30-pdo_odbc.ini,
/usr/local/etc/php/ext-30-pdo_pgsql.ini,
/usr/local/etc/php/ext-30-pdo_sqlite.ini,
API Extensions => mysql,mysqli,pdo_mysql
PDO
PDO support => enabled
PDO drivers => dblib, firebird, mysql, odbc, pgsql, sqlite
pdo_dblib
PDO Driver for FreeTDS/Sybase DB-lib => enabled
PDO_Firebird
PDO Driver for Firebird => enabled
pdo_mysql
PDO Driver for MySQL => enabled
pdo_mysql.debug => no value => no value
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
PDO_ODBC
PDO Driver for ODBC (unixODBC) => enabled
pdo_pgsql
PDO Driver for PostgreSQL => enabled
pdo_sqlite
PDO Driver for SQLite 3.x => enabled

ブラウザ上
PDO NOT installed

PDO関連,存在せず

以上,よろしくお願い申し上げます.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2016/10/25 06:21

関連サービスの再起動してみたらどうでしょうか。apache, nginx, php-fpmなど
popobot

2016/10/25 06:26 編集

また、ブラウザとターミナルで使っているPHPが同じか確認するためにphpinfo()を実行した結果をそれぞれで見てみてください。
yamadoc

2016/10/25 06:43

承知しました.
popobot

2016/10/25 07:01

よくわかりませんが、手元の環境でもBuild Dateは異なっているので、関係ないかと。たぶん同じPHPを見てると思います。ちなみにAdditional .ini files parsedという項目は、違いがありますか?
popobot

2016/10/25 07:02

あと、ブラウザの場合、PDO関連の出力はないですか?
yamadoc

2016/10/25 07:15

Additional .ini files parsed この項目は全く同じでした.
yamadoc

2016/10/25 07:16

ブラウザの場合,PDO関連の出力はありません.
yamadoc

2016/10/25 07:17

お手数をおかけいたしますが,回答欄へ移動できないでしょうか
guest

回答2

0

ベストアンサー

※あまり原因が特定できていませんが、情報追加欄だとやりにくようなのでこちらへ移動

設定ファイルが違わないか確認するため、以下を見てみてください。
Loaded Configuration Fileは同じですか?
Scan this dir for additional .ini filesは同じですか?
Additional .ini files parsedにpdo.iniみたいな記載はありますか?
直接関係ないですが、HTTPサーバはApache? nginx? php-fpmを使っていますか?

投稿2016/10/25 07:57

編集2016/10/25 08:04
popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamadoc

2016/10/25 08:06

ブラウザからですと,以下の通りです. Additional .ini files parsed ext-20-pdo.ini ext-30-pdo_firebird.ini ext-30-pdo_mysql.ini ext-30-pdo_odbc.ini ext-30-pdo_pgsql.ini ext-30-pdo_sqlite.ini ターミナルも全く同じでした. /usr/local/etc/php/ext-20-pdo.ini, /usr/local/etc/php/ext-30-pdo_dblib.ini, /usr/local/etc/php/ext-30-pdo_firebird.ini, /usr/local/etc/php/ext-30-pdo_mysql.ini, /usr/local/etc/php/ext-30-pdo_odbc.ini, /usr/local/etc/php/ext-30-pdo_pgsql.ini, /usr/local/etc/php/ext-30-pdo_sqlite.ini, HTTPサーバはApache2.4を利用しています.
popobot

2016/10/25 08:24

ブラウザ側は/usr/local/etc/php/とは書いてないのですか?
yamadoc

2016/10/25 08:25

失礼しました.ブラウザ側も書いてあります. /usr/local/etc/php/ext-20-pdo.ini, /usr/local/etc/php/ext-30-pdo_firebird.ini, /usr/local/etc/php/ext-30-pdo_mysql.ini, /usr/local/etc/php/ext-30-pdo_odbc.ini, /usr/local/etc/php/ext-30-pdo_pgsql.ini, /usr/local/etc/php/ext-30-pdo_sqlite.ini,
popobot

2016/10/25 08:28

ちなみに/usr/local/etc/php/ext-20-pdo.iniの中はどんな感じですか? 以下のとおり? extension=pdo.so
yamadoc

2016/10/25 08:31

以下の通りとなりました. # cat ext-20-pdo.ini extension=pdo.so もしかして,FreeBSD 10.2 上の,Apache2.4 とPHP5.6は相性が悪いとか あるのでしょうか. 仮に相性が実際に悪かったとしても,当方にはどのように調査したらよいかわかりません...
popobot

2016/10/25 08:38 編集

あまり相性なんて関係ないですよ... FreeBSD使っている点が難易度高いですが。 次ですが... phpinfoの結果のextension_dirそれぞれどうなっていますか?
popobot

2016/10/25 08:36

あと、apacheのログにエラー等でてないかみるといいかもしれません。FreeBSD詳しくないのでどこにでるのかわかりませんが...。
yamadoc

2016/10/25 08:42

お忙しいところ大変助かります. ターミナルでは以下の通りです. extension_dir => /usr/local/lib/php/20131226-debug => /usr/local/lib/php/20131226-debug sqlite3.extension_dir => no value => no value ブラウザでは下記の通りとなりました. extension_dir /usr/local/lib/php/20131226 /usr/local/lib/php/20131226 違うところを参照しているようです.
popobot

2016/10/25 08:45 編集

お! ちなみにそのディレクトリにsoファイルありますか?
yamadoc

2016/10/25 08:47

存在しますが,20131226には10ファイルしかないのに対し, 20131226-debug には34ファイル存在します.
popobot

2016/10/25 08:56 編集

うーん、なんでこうなったんでしょうね...。 とりあえず、php.iniあたりで、extension_dirの設定をdebug側にすればブラウザでもpdoは動くと思います。 extension_dir = "/usr/local/lib/php/20131226-debug" ※apacheの再起動も必要だと思います。
yamadoc

2016/10/25 09:04

php.ini で extension_dir を debug 側に直し,システムを再起動しました. 結果は,変わりませんでした. なぜ変わらないのか,全くわかりません.
yamadoc

2016/10/25 09:05

extension_dir /usr/local/lib/php/20131226-debug /usr/local/lib/php/20131226-debug ブラウザの当該箇所は,直りました.
popobot

2016/10/25 09:05

あら、ちなみにphpinfoの結果には設定が反映されていますか? あと、pdo.soはdebug側にありましたか?
popobot

2016/10/25 10:33 編集

extension_dirは複数設定もできるみたいですね extension_dir = "/usr/local/lib/php/20131226:/usr/local/lib/php/20131226-debug" ※実際には複数指定はできませんでした... 上記設定は動きません
yamadoc

2016/10/25 09:11

複数できる旨,教えていただいて誠にありがとうございます.大変助かります. ブラウザ上では以下の通りとなりました. extension_dir /usr/local/lib/php/20131226:/usr/local/lib/php/20131226-debug /usr/local/lib/php/20131226:/usr/local/lib/php/20131226-debug ターミナル上では以下の通りとなりました. extension_dir => /usr/local/lib/php/20131226:/usr/local/lib/php/20131226-debug => /usr/local/lib/php/20131226:/usr/local/lib/php/20131226-debug
yamadoc

2016/10/25 09:12

pdo.so はdebug側にのみ,存在します.
popobot

2016/10/25 09:35

うーん、わからないですね.... あとは試行錯誤してみるしかないですかね...。 extension_dirを/usr/local/lib/php/20131226にしてみてターミナル側がどうなるかとか /usr/local/lib/php/20131226にpdo.soをおいてみるとか
popobot

2016/10/25 10:08

自分の環境でextension_dirをおかしなPATHにするとPHP Warningがでますね 以下のコードを追加してエラーを出力するようにしたらエラーとか出ますか? error_reporting(E_ALL);
popobot

2016/10/25 10:20

ちなみにインストールは何かを参考にしたのでしょうか? ターミナル側はビルドオプションにdebugがついており、ブラウザ側はついていないとかそういう感じだったのかもしれないですね... php -vの結果にも(DEBUG)とついていますし。 以下が参考になりそうですが、自分はFreeBSD環境は持ってないので、これ以上はお手上げかもしれません。 http://kaworu.jpn.org/freebsd/PHP5.6%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B
yamadoc

2016/10/25 10:20

extension_dir を 20131226にしたところ,下記のようなエラーが大量に出ました. PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20131226/xmlwriter.so' - Cannot open "/usr/local/lib/php/20131226/xmlwriter.so" in Unknown on line 0 20131226-debug 側に戻すと,エラーははきません. extension_dir を 両方とも設定した上で,pdo.so を20131226へ移動させてみました. エラーを大量に吐くようになりました. 取り急ぎ,ご報告まで.
popobot

2016/10/25 10:23

自分の環境でも意図的にPATHを変えるとそのエラーが出てましたね。やっぱりsoファイルが見つかっていないということみたいです。extension_dir以外にもデフォルトの設定がターミナルとブラウザで違うんでしょうね... phpinfoをくまなく調べればわかるかもしれません。
yamadoc

2016/10/25 10:24

実は業務で使うサーバで,構築には当方は関わっておりません. 丁寧で,親切なご対応頂き本当にありがとうございます. 大変助かります. インストール時の設定について,担当者に照会し,もう少し調査してみます. お返事が遅くなりますが,引き続きお付き合いいただけたら幸いです. お手数をおかけいたしますが,何卒よろしくお願い申し上げます.
popobot

2016/10/25 10:32 編集

すみません。extension_dirの複数指定は自分の環境でやってみましたが、うまくいかないみたいですね... もう一度調べたら複数指定はできないみたいでした...混乱させてしまってすみません。 なるほど、それは担当者に聞いてみたほうがいいですね!
yambejp

2016/10/25 11:51

なんらかのデバグオプション付きでphpを入れてしまっているのかもしれませんね pdo関連のモジュールをportsから入れ直したほうがよいかもしれません。
yamadoc

2016/10/26 06:52

皆さん,ありがとうございます. 前任者に確認し, /usr/local/lib/php以下を削除した上で, 改めて,portsから再構築を行ったところ,無事にPDO環境を構築することができました.
guest

0

phpinfo()で以下確認ください

  • PDOセクションが表示されること

PDO driversが表示されます

  • pdo_mysqlセクションが表示されること

Client API version が表示されます
また、pdo_mysql.default_socketで使用されるソケットが表示されます

  • mysqlndのセクションが表示される

API Extensions に pdo_mysql が表示されます

投稿2016/10/25 06:52

yambejp

総合スコア114585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamadoc

2016/10/25 07:00

ご回答頂きありがとうございます. ターミナル上でphpinfo()を実行したところ, 以下の通りとなりました. PDO_ODBC PDO Driver for ODBC (unixODBC) => enabled ODBC Connection Pooling => Enabled, strict matching pdo_mysql PDO Driver for MySQL => enabled Client API version => mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ Directive => Local Value => Master Value pdo_mysql.debug => no value => no value pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock mysqlnd mysqlnd => enabled Version => mysqlnd 5.0.11-dev - 20120503 - $Id: 76b08b24596e12d4553bd41fc93cccd5bac2fe7a $ Compression => not supported core SSL => supported extended SSL => not supported Command buffer size => 4096 Read buffer size => 32768 Read timeout => 31536000 Collecting statistics => Yes Collecting memory statistics => Yes Tracing => n/a Loaded plugins => mysqlnd,example,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password API Extensions => mysql,mysqli,pdo_mysql 取り急ぎ,お返事まで.
yamadoc

2016/10/25 07:05

たびたび失礼いたします. ブラウザ上で,phpinfo()を実行したところ,下記の通りとなりました. PDOセクションは存在せず pdo_mysql セクションは存在せず mysqlnd API Extensions no value よろしくお願い申し上げます.
yambejp

2016/10/25 07:16

pkg info|grep php56 で、ご利用のphp5.6.27に相当する mod_php56-5.6.27 php56-pdo-5.6.27 php56-pdo_mysql-5.6.27 がインストールされているか確認してみてください 見た感じCLIでは利用可能になってますがapacheのモジュールが うまく読まれていないように見えますが
yamadoc

2016/10/25 07:22

pkg info | grep php56 を実行させていただいたところ,下記の通り,存在しておりました. mod_php56-5.6.27 PHP Scripting Language php56-pdo-5.6.27 The pdo shared extension for php php56-pdo_mysql-5.6.27 The pdo_mysql shared extension for php 取り急ぎ,お返事まで.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問