🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

解決済

2回答

2479閲覧

PHPのdisable_functionsで制御できる「関数」の定義

tesopgmh

総合スコア146

PHP

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

0グッド

1クリップ

投稿2021/02/22 16:09

「php.ini」で定義できる「disable_functions」という項目があると思います
「disable_functions」にカンマ区切りで関数名を記載するとその関数を使えなくすることができます

利用しているPHPのバージョンは「7.3.24」です

disable_functions string
このディレクティブを使うと、特定の関数を無効にすることができます。 関数名の一覧をカンマ区切りで指定します。
このディレクティブで無効にできるのは 内部の関数だけです。 ユーザーが定義した関数 は影響を受けません。


とのことで、試しにechoを禁止してみました

disable_functions = echo

再起動後

<?php echo 'abcd';

結果

abcd

ん??
echo は関数じゃないのか?


ではexit()で

disable_functions = exit

再起動後

<?php exit('abcd');

結果

abcd

なんで??


ではサンプルによくあるphpinfoを禁止にしてみる

disable_functions = phpinfo

再起動後

<?php phpinfo();

結果

PHP Warning: phpinfo() has been disabled for security reasons in /var/www/html/bou3/webroot/test.php on line 2

これは期待する結果になりました


ここで疑問なのですが、echoやexitは関数ではないのでしょうか?
マニュアルにはしっかりと「関数」と書かれています
https://www.php.net/manual/ja/indexes.functions.php

それか「disable_functions」で無効にできる関数は限定的なのなのでしょうか
その場合「disable_functions」で無効にできる関数の一覧が欲しいのですが
マニュアルには書かれていないようです
https://www.php.net/manual/ja/ini.core.php

ここら辺の仕様に詳しい方おられましたらご教授いただけたらと存じます
お忙しい中恐縮ですがご確認よろしくお願い致します

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

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

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

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

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

guest

回答2

0

echoexitは予約語で、if等と同じく言語構造です。
参考:PHP: キーワードのリスト - Manual

リファレンスを見ずとも、echoは括弧が不要なことからして関数でないことは分かると思います。

PHPの公式リファレンスは、詳しいのは良いのですが、目次構造がおかしいので、これら関数でないものが関数の章に書いてあります。個々のページを見ると「関数でない」旨は書いてあるのですが。

投稿2021/02/22 17:16

otn

総合スコア85890

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

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

tesopgmh

2021/02/24 02:09

ありがとうございます、言語構造というのですね exit()には括弧があるので、関数の定義は「文字列+括弧」ではなさそうです
otn

2021/02/24 02:51 編集

はい。exitが関数でないことを知るにはリファレンスを見ることが必要です。 見るまでもないのはechoくらいですかね。
guest

0

ベストアンサー

マニュアルによるとecho、exitなどは関数ではなく、言語構造となっています。
echo
exit

言語構造とは何か、についてはPHPマニュアル内で見つけられなかったので以下を紹介します。
※言語構造一覧も載っています。
PHPのechoとprintは言語構造だというけど、言語構造とは何か

投稿2021/02/22 16:43

javahack

総合スコア1088

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

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

tesopgmh

2021/02/24 02:06

ありがとうございます! 言語構造というものなのですね勉強になりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問