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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

1回答

792閲覧

PHPでdefineが上書きされる問題

pre-ningen

総合スコア1

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

0グッド

0クリップ

投稿2022/04/07 07:24

編集2022/04/07 09:02

お名前.com のレンタルサーバーでWordPressを利用しています。
これまで さくら、conoHa、Xserver など色々と使ってきましたが、今回 お名前.com に限ってログファイルが出せません。

以下を wp-config.php に記載しているのですが、テーマディレクトリに error.log が出力されないのです▼

PHP

1define( 'WP_DEBUG', true ); 2if ( WP_DEBUG ) { 3 $log_file = DIR_THEME_URI . '/error.log'; 4 define( 'WP_DEBUG_DISPLAY', false ); 5 define( 'WP_DEBUG_LOG', $log_file ); 6}

この問題に対するアプローチは次の2つだと思います。

まず DIR_THEME_URI の確認です。これはできました▼

PHP

1define( 'WP_DEBUG', true ); 2if ( WP_DEBUG ) { 3 $log_file = DIR_THEME_URI . '/error.log'; 4 define( 'WP_DEBUG_DISPLAY', false ); 5 define( 'WP_DEBUG_LOG', $log_file ); 6} 7die( 'DIR_THEME_URI = ' . DIR_THEME_URI ); 8// -> DIR_THEME_URI = https://example.com/wp-content/themes/pre-ningen

であれば残るは WP_DEBUG ですが、まさかのこれが false になったのです▼

PHP

1define( 'WP_DEBUG', true ); 2if ( WP_DEBUG ) { 3 $log_file = DIR_THEME_URI . '/error.log'; 4 define( 'WP_DEBUG_DISPLAY', false ); 5 define( 'WP_DEBUG_LOG', $log_file ); 6} 7die( 'WP_DEBUG = ' . json_encode( WP_DEBUG ) ); 8// -> WP_DEBUG = false

これでログファイルの出ない原因は if{} の中を通らないせいだろうと判断できましたが、明らかにすぐ上で true として define しているのに、false になる。こんなことってあるのでしょうか?

そしてどのようにすれば if{} の中を通すことができるでしょうか?

ここから補足です( 2022/04/07 17:50 2022/04/07 18:03 )

やはり if{} の中を通らないということが目下の課題に思われます。
次の記述でもサイトは正常に表示され die されなかったためです▼

PHP

1define( 'WP_DEBUG', true ); 2if ( WP_DEBUG ) { 3 die( 'if{} の中を通りました' ); 4}

もちろん以下では die されます▼

PHP

1define( 'WP_DEBUG', true ); 2if ( true ) { 3 die( 'if{} の中を通りました' ); 4} 5

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

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

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

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

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

takasima20

2022/04/07 07:36

それ json_encode() が失敗してるのでは? die( 'WP_DEBUG = ' . (WP_DEBUG)?'True':'False' );
pre-ningen

2022/04/07 07:44

そちらでは確かに True になりました。それにしてもなぜログファイルがでないのか…。 ちなみに以下を試すと die() は効かず、普通にサイトが表示されました▼ ```PHP define( 'WP_DEBUG', true ); if ( WP_DEBUG ) { $log_file = DIR_THEME_URI . '/error.log'; define( 'WP_DEBUG_DISPLAY', false ); define( 'WP_DEBUG_LOG', $log_file ); die( 'if{} の中を通りました' ); // 効かず } ``` なので if{} の中を通っていないのは間違いなさそうで、謎が深まるばかりです。
tabuu

2022/04/07 07:48

出力先ディレクトリのパーミッションも確認されました?
takasima20

2022/04/07 07:55

あと error.log が存在するならそのパーミッションもね。
gogoweb_ikeda

2022/04/07 07:56

DIR_THEME_URIは自分で定義した定数だと思われますが 何が定義されていますか?
pre-ningen

2022/04/07 08:15 編集

tabuu様 パーミッションというと出力が制限されている可能性があるということでしょうか?その辺り疎く正確な確認を知らないのですが、少なくとも以下 file_put_content を wp-config.php に記載したところ、test.txt の出力は成功致しました▼ ```PHP $test_file = DIR_THEME . '/test.txt'; file_put_contents( $test_file, date("Y/m/d H:i:s") ); // -> 2022/04/07 08:02:34 ``` 尚、上記の定数 DIR_THEME は次のように宣言しています▼ ```PHP define( 'DIR_THEME', "/home/r0000000/public_html/example.com/wp-content/themes/pre-ningen" ); ``` また先ほどのコメントした通り die( 'if{} の中を通りました' ); が効かないので、 if{} の中を通っていないということが問題の根幹にあるのではないでしょうか。
pre-ningen

2022/04/07 08:29 編集

gogoweb_ikeda様 質問で die(); した値がそのまま、次のように宣言されています▼ ```PHP define( 'DIR_THEME_URI', 'https://example.com/wp-content/themes/pre-ningen' ); ``` get_template_directory_uri() は使わずこのようにベタ打ちですが、この定数は他のところ( wp_enqueue_script 等 )では正しく機能していますので、問題はないはずです。
gogoweb_ikeda

2022/04/07 08:20

調べたところWP_DEBUG_LOGは保存先URLを指定するのではなく真偽値を入力して、 出力先はテーマディレクトリではなくwp-content直下に出力されるようですが、そちらにはありませんか?
pre-ningen

2022/04/07 08:40

gogoweb_ikeda様 wp-content 直下にはございません。質問のコードはその出力先をテーマ直下に変更するものです。WordPress 5.1以降、真偽値でなくパスを指定することができるようになっておりまして、他社サーバーでは機能致します。
tabuu

2022/04/07 13:56

既に定義済みでは? if (defined('WP_DEBUG')) { die(WP_DEBUG); } define('WP_DEBUG', true); if (WP_DEBUG) { ... }
guest

回答1

0

あくまで状況から推察する可能性という話ですが

php

1define( 'WP_DEBUG', true ); 2if ( WP_DEBUG ) {

セミコロンの後ろか if の前に全角空白とか入ってないスか?
ただ、その仮定が正解だった場合、エラーで止まりそうなもんなんですが…

投稿2022/04/07 11:09

takasima20

総合スコア7468

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

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

pre-ningen

2022/04/07 11:18

ございません。質問のままです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問