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

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

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

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

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

Q&A

解決済

4回答

11705閲覧

PHP7.1環境下でrequire_once("MDB2.php");でParse error

miya_kodori

総合スコア13

PHP

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

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

0グッド

1クリップ

投稿2017/03/18 16:02

現在、PHP5.6で運用中のシステム(PHP+mySQLなどで制作)をPHP7.1配下での運用が出来るように、プログラムのバージョンアップを図ろうとしています。
xammpでテストした結果です。尚、こっそり本番でも起動させたところ、同じエラーメッセージが出ました。
MDB2を1回だけ呼んで以降pear関数を使ってMDB2を読みます。

1:PHP5.6では問題なく動きます。
2:PHP7.1では下記のエラーが、先頭で出ます。

(プログラムソース)

<?php print"****point*0**"; // MDB2 ライブラリの読み込み require_once("MDB2.php"); print"****point*1**"; 以下省略 (エラーメッセージ開始) ****point*0** Parse error: syntax error, unexpected 'new' (T_NEW) in C:\xampp\php\pear\MDB2.php on line 390 エラーメッセージ終了) 上記、Parse errorは文法エラーとのことですが、当方が記述した部分はrequire_once("MDB2.php");だけなので、文法が間違っているとは思えません。何が問題なのでしょうか?、また、このような時、エラーログなどの見方、出力方法などを御教示頂くと助かります。 宜しくお願い申し上げます。

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

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

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

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

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

guest

回答4

0

下記のような原因でエラーが発生している模様です。

PHP 下位互換性のないその他の変更
どうやらMDB2.phpの390行目で新しいオブジェクトを参照渡しで変数に代入しているようで、そのような記述方法はPHP5系では非推奨とされていたらしいですが、PHP7ではエラーを返すように変更になったようです。(本当にMDB2.phpの390行目で新しいオブジェクトを参照渡しで変数に代入しているかどうかは、実際のコードは見れていないので、憶測ですが)

エラー調査方法

『**point*0 Parse error: syntax error, unexpected 'new' (T_NEW) in C:\xampp\php\pear\MDB2.php on line 390』
このエラー文言から調査しました。

プロセスとしては、
1、エラー文言を見て、「MDB2.phpの390行目で'new' (T_NEW) というのが原因で文法エラーが起きている」と認識
2、自作コードではなくライブラリの記述によるもの、かつphp5系では動きphp7系では動かない⇨php7でエラーが吐かれるように変更になった処理がライブラリ内で記述されているのでは?と予測
3、『php T_NEW』でググる⇨PHP公式ドキュメント確認⇨たぶんこれだ

Parse errorについては調査できていたみたいなので、もうちょっとググればご自身でも見つけ出せる答えかと思います。頑張って下さい。

投稿2017/03/18 16:34

naoyama88

総合スコア54

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

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

0

自己解決

私の場合の ”MDB2.php”のエラー”~unexpected 'new' (T_NEW)〜”は、御指摘頂いた、「MDB2.phpの390行目で新しいオブジェクトを参照渡しで変数に代入している」が原因だと思いました。ありがとうございます。しかしながら、MDB2.phpはpearコマンドでインストールして組込むシステムの一部で、個人的に修正すべきものでは無いと考えました。中身のコードを見ますと、2007年以降、修正されておりません。PHP7.1に準拠した修正はされなかったということになります。
「去る者は追わず」で、MDB2.phpにはあっさり見切りをつけ、「PDO対応」が正当な方法と考えて修正しています。
御指摘ありがとうございました。

投稿2017/04/04 09:48

miya_kodori

総合スコア13

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

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

0

同じ現象が出ていましたので、以下のページを参考にしたところ解決しました。

http://doroyamada.hatenablog.jp/entry/20160612/1465740553

投稿2017/03/21 17:14

mazi

総合スコア8

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

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

0

MDB2.php の 390行目でエラーがでてるようですね。
インストールが不足してるのかと思ったけどちがうよう。
推測ですが…

PHP マニュアル 付録 PHP 5.6.x から PHP 7.0.x への移行
下位互換性のない変更点
変数の取り扱いの変更
変数やプロパティ、メソッドへの間接的なアクセスの扱いの変更
http://php.net/manual/ja/migration70.incompatible.php#migration70.incompatible.variable-handling.indirect

このあたりにひっかかってるのかなあ、と。
対策としては PDO に移行する?
http://nazonohito51.jugem.jp/?eid=49

投稿2017/03/18 22:15

takasima20

総合スコア7458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問