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

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

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

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

Q&A

解決済

3回答

1342閲覧

phpのmysql_real_escape_stringなどが使いたい

progman

総合スコア66

PHP

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

0グッド

2クリップ

投稿2018/01/28 08:11

編集2018/01/28 08:46

以前phpで開発したシステムをlamppに移行しようとしているのですが、
phpのバージョンが新しいもので
Warning (2): mysql_real_escape_string() [function.mysql-real-escape-string]: そのようなファイルやディレクトリはありません
といったエラーが出て正常動作しません。
phpの古いバージョンでサポートされていて、最新ではサポートされない機能を
結構使っているようです。

全機能をチェックして移行はとりあえず今はできないので、PHP 5.5相当で動かすには
どうすればよいでしょう?

昔のlamppでも入手するのがよいでしょうか?
どこで入手できるでしょう?
z
それとも何か互換モードのようなものがあって、旧仕様で動かすことはできないでしょうか?

lamppのphpはPHP 5.6.32で、このphpが動作して上記のようなエラーになっているのでしょうが、OS(centOS)上にはPHP 5.4.16 が入っています。
lamppのapacheで使用するphpを5.4.16の方に切り替えて使用するといったことはできないでしょうか?

また、環境は複数あってmacosではphp 5.6.21で正常動作しているのですが、centosでは
上記の通り5.6.32で

Warning (2): mysql_real_escape_string() [function.mysql-real-escape-string]: そのようなファイルやディレクトリはありません

というエラーが出ています。
phpのバージョンの問題とも限らないでしょうか?

centos上でlamppのphpバージョン確認
[root@localhost bin]# pwd
/opt/lampp/bin
[root@localhost bin]# php -v
PHP 5.4.16 (cli) (built: Nov 15 2017 16:33:54)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

macos上でlamppのphpバージョン確認
SanPedro:XAMPP apple$ pwd
/Applications/XAMPP
SanPedro:XAMPP apple$ bin/php -v
PHP 5.6.21 (cli) (built: May 12 2016 03:39:40)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

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

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

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

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

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

guest

回答3

0

phpinfo()でmysqlセクションは表示されますか?
されなければmysql_関連のモジュールがインストールされていないのだと思います。
もしインストールできていてもmysql_connect()を実行後にしか
mysql_real_escape_string()は有効になりません
そしてmysql_connect()はphp7では廃止されていますし、PHP5.x環境でも
廃止予定として「Deprecated」のコーションが表示されます。

投稿2018/01/29 00:29

yambejp

総合スコア114779

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

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

progman

2018/01/30 13:33

レスありがとうございます。 mysql関連のモジュールはインストールされています。 ConnectionManager::getDataSource でコネクションを張っています。 試しに一部の機能でmysql_real_escape_stringの記述をとると、その部分については DBアクセス機能も含め正常に動作します。 しかし、mysql_real_escape_stringを使用すると最初の投稿の通りエラーとなります。
yambejp

2018/01/30 13:37

> ConnectionManager::getDataSource でコネクションを張っています。 ちょっと状況がわかりません mysql_connect()を実行していれば使えるし、実行していなければ使えない というのが回答の主旨です
退会済みユーザー

退会済みユーザー

2018/01/30 13:49

ConnectionManager って CakePHP のクラスでしょ? そこへもって、mysql_real_escape_stringを使うなどもってのほかです。
progman

2018/01/30 21:58

レスありがとうございます。 当初(windowsとcentosphpの5.3.18など)環境開で、 ConnectionManager、mysql_real_escape_string でテストもOKだったのです。 今も細かいテストはしていませんが、macosの環境では動いています。 しかし、そもそもそんな使用は間違いで、たまたま動いていたのでしょう。 ということでしょうか? しかし、そうではなくて mysql_real_escape_stringはインターフェース上、DBコネクト情報が必須でもなく ConnectionManagerも内部的にmysql_connect()を呼んでいて、その情報を参照して、 うまく動作していた。 mysqli_real_escape_string使うに、DBコネクト情報をうまく渡してやれば良いでしょう。 という考えは成り立ちませんか?
guest

0

投稿2018/01/28 11:10

hichon

総合スコア5737

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

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

progman

2018/01/28 14:19

レスありがとうございます。 残念ながら、私が質問していることの回答には全くなっていません。
ockeghem

2018/01/29 00:54

参照先を読むと、PHP5.6ではmysql_real_escape_stringは(警告は表示されるが)サポートは一応継続されていることが分かるはずですが
progman

2018/01/30 13:42

レスありがとうございます 警告が表示されることと、「サポートは一応継続」は関連ないですよね 実際にはデータが落ちていて、警告メッセージが表示されるだけでなく、正常動作しません。 他の返信にも書いてますが、mysql_real_escape_stringを外せば、正常動作します。 macosでは警告もでず、正常動作 centosでは警告メッセージが出て動作せずという状況です。
ockeghem

2018/01/30 22:39

はい。警告は出ます。しかし、あくまで警告なので、「警告は出るが動作は正常」というのが5.6までの仕様です
guest

0

自己解決

わかっていることを整理しようと思います。
1.mysql_real_escape_stringはmysql_connect()と合わせ使用を前提としている。

2.私のAPは、Centos5.8やWindows7のPHP5.8のかnConnectionManager::getDataSource とmysql_real_escape_stringで使用して正常動作していた。
centos5.8の環境は現在もあり、正常動作している。(Windows環境はすでにない)

3.CentOS7.4 PHP 5.4.16 では2.のAPは
Warning (2): mysql_real_escape_string() [function.mysql-real-escape-string]: そのようなファイルやディレクトリはありません
というエラーが出て、また受け取り側にはデータが渡らず結果はNGとなる。
しかし、
MacOS 10.13.2 PHP 5.6.21ではエラーメッセージも出ず、動作も正常である。

合点が行かない部分もありますが、
結論としてCentOS7.4 PHP 5.4.16 などで使いたいなら、プログラム修正するしかないということだと思います。

投稿2018/02/03 03:15

progman

総合スコア66

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問