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

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

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

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

Q&A

2回答

2412閲覧

PHPで発生するエラーが解決できません

WAKSUGI

総合スコア4

PHP

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

0グッド

0クリップ

投稿2019/09/26 05:04

PHPを実行した際に以下のエラーが出ます。

[Thu Sep 26 13:59:49.670478 2019] [php7:emerg] [pid 6324] [client 192.168.10.90:10788] PHP Parse error: syntax error, unexpected '"', expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /var/www/html/shinobu/app/Models/T_access_log.php on line 31
[Thu Sep 26 13:59:49.670490 2019] [php7:error] [pid 6324] [client 192.168.10.90:10788] PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0

これより前の行にエラーがあると思い、削除したりしてみたのですが解決しません。

以下が対象のコードになります。

PHPは7.2になります

<?php namespace App\Models; use Illuminate\Support\Facades\DB; use Illuminate\Database\Eloquent\Model; use Illuminate\Pagination\LengthAwarePaginator; class T_access_log extends Model { public static function getList(){ $sql = <<< SQL SELECT * FROM public.t_access_log SQL; $data = DB::select($sql); return $data; } public static function pushList($req,$log_kbn,$pid,$method,$query,$ip){ $q_tmp=str_replace(array('\', '%', '_'),array('\\', '\%', '\_'), $query); if(is_array($query)==TRUE){ $q_tmp = implode(",", $q_tmp); } $q = substr(pg_escape_string($q_tmp),0,2000); $day = date("YmdHis"); $prid = substr($pid,0,20); $host = gethostbyaddr($_SERVER["REMOTE_ADDR"]); $user = get_current_user(); if(substr($pid,0,6)!="assets"){ $sql = <<< SQL INSERT INTO t_access_log ( access_log_kbn, program_id, shori_date_time, ip_address, action_method, message, deleted_flg, create_terminal_name, create_windows_user_name, create_tantosha_id, create_tantosha_name, create_program_id, create_date_time ) VALUES ( '{$log_kbn}', '{$prid}', '{$day}', '{$ip}', '{$method}', '{$q}', '0', '{$host}', '{$user}', '{$req['tantosha_id']}', '{$req['tantosha_name']}', '{$req['program_id']}', current_timestamp ) SQL; DB::insert($sql); } return ; } public static function SYNV0010( $req ,$hanyo ,$ip=null ,$from=null ,$to=null ,$tfrom=null ,$tto=null ,$mfrom=null ,$mto=null ,$kbn=null ,$method=null ,$pid=null ) { $sql = <<<SQL SELECT ta.shori_date_time, ta.access_log_kbn, ta.program_id, mh.data_name, ta.action_method, ta.ip_address, ta.message, ta.create_terminal_name, ta.create_windows_user_name FROM public.t_access_log AS ta LEFT JOIN public.m_hanyo AS mh ON ta.program_id=mh.data_id AND mh.kojo_code='{$req->session()->get('KOJO_CODE')}' WHERE 1=1 SQL; if(!empty($ip)){ $sql.=" AND ip_address LIKE '"; foreach($ip as $ipa){ if(!empty($ipa)){ $sql.=$ipa.'.'; }else{ $sql.='%'.'.'; } } $sql=rtrim($sql, '.'); $sql.="'"; } if(!empty($from)){ $fr = preg_replace('/[^0-9]/', '', mb_convert_kana($from, 'kvrn')); if(!empty($tfrom)){ if(mb_strlen($tfrom)==1){ $tfrom='0'.$tfrom; } $fr.=mb_convert_kana($tfrom, 'kvrn'); if(!empty($mfrom)){ if(mb_strlen($mfrom)==1){ $mfrom='0'.$mfrom; } $fr.=mb_convert_kana($mfrom, 'kvrn'); } } $fr=str_pad($fr, 14, 0, STR_PAD_RIGHT); $sql.=<<<SQL AND shori_date_time>='{$fr}' SQL; } if(!empty($to)){ $t = preg_replace('/[^0-9]/', '', mb_convert_kana($to, 'kvrn')); if(!empty($tto)){ if(mb_strlen($tto)==1){ $tto='0'.$tto; } $t.=mb_convert_kana($tto, 'kvrn'); if(!empty($mto)){ if(mb_strlen($mto)==1){ $mto='0'.$mto; } $t.=mb_convert_kana($mto, 'kvrn'); }else{ $t.='5959'; } }else{ $t.='235959'; } $t=str_pad($t, 14, 0, STR_PAD_RIGHT); $sql.=<<<SQL AND shori_date_time<='{$t}' SQL; } if(!empty($kbn)){ switch ($kbn) { case '1': $kubun="001"; break; case '2': $kubun="002"; break; case '3': $kubun="003"; break; default: $kubun=""; break; } $sql.=<<<SQL AND access_log_kbn='{$kubun}' SQL; } if(!empty($method)){ $sql.=<<<SQL AND action_method='{$method}' SQL; } if(!empty($pid)){ $sql.=<<<SQL AND program_id LIKE '%{$pid}%' SQL; } $sql .= <<<SQL ORDER BY shori_date_time DESC SQL; $alldata = DB::select($sql); if(isset($req->page)==false){ $page=1; }else{ $page=$req->page; } $disp_limit=$hanyo[0]->suchi2; $skip = $disp_limit * ($page-1); $disp_data = array_slice($alldata,$skip,$disp_limit); if(count($alldata)<$hanyo[0]->suchi1){ $amount =count($alldata); }else{ $amount = $hanyo[0]->suchi1; } $path = array('path'=>'/'.$req->path()); $data = new LengthAwarePaginator($disp_data , $amount, $disp_limit, $page, $path); return $data; } }

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

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

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

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

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

guest

回答2

0

ヒアドキュメント

非常に重要なことですが、終端 ID がある行には、セミコロン (;) 以外の他の文字が含まれていてはならないことに注意しましょう。 これは、特に ID はインデントしてはならないということ、 セミコロンの前に空白やタブを付けてはいけないことを意味します。 終端 ID の前の最初の文字は、使用するオペレーティングシステムで定義された 改行である必要があることにも注意を要します。 これは、例えば、Macintoshでは \r となります。 最後の区切り文字の後にもまた、改行を入れる必要があります。

ですので、

php

1 $sql = <<< SQL 2 SELECT 3 * 4 FROM 5 public.t_access_log 6 SQL;

が原因では

投稿2019/09/26 05:13

rururu3

総合スコア5545

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

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

0

全体の処理についてはわかりませんが、Parse Errorだけに関して言えば
終端IDの前に入ったスペースが原因だと思います。

ヒアドキュメントに関する注意を読んでください

$sql = <<<SQL ・・・ SQL;//先頭に一切の空白文字を許さない「行頭からSQL;とする」

投稿2019/09/26 05:16

yambejp

総合スコア114833

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

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

WAKSUGI

2019/09/26 05:27

なるほどです。見易さのために入れたタブでエラーなのですね。 ただこれを戻すと [Thu Sep 26 14:22:19.640648 2019] [php7:emerg] [pid 8824] [client 192.168.10.90:11593] PHP Parse error: syntax error, unexpected end of file in /var/www/html/shinobu/app/Models/T_access_log.php on line 230 [Thu Sep 26 14:22:19.640664 2019] [php7:error] [pid 8824] [client 192.168.10.90:11593] PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0 このエラーが発生します。 もともとこのエラーが発生していて、見やすくしてエラーが変わったので質問を書いてみておりました。 このエラーの場合かっこの数が合わないなどですが、見る限りはあっているようなのですが。
yambejp

2019/09/26 05:30

シンタックスエラーなので明らかな記載漏れがあるはずですけどね インテリジェントなエディタをつかえば指摘してくれそうな気がします。 手動で地道にデバグするなら、ざっくりと/* */でコメントアウトして エラーが出ない状態までもっていき、少しずつ範囲を広げることです
WAKSUGI

2019/09/26 05:39

そうしてみます。 あと、PHP7.2と7.3でかなりの違いがあるのでしょうか
yambejp

2019/09/26 05:49 編集

まだ7.3のドキュメントの日本語化が進んでいないようですが PHP7.3からヒアドキュメントの仕様が大幅に変わっているようなので いろいろ試してみるとよいかもしれませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問