状況の完全なコンテキストは次のとおりです。
最近、新しいMacを入手しました。私はphp開発者なので、MAMPをダウンロードして開発を開始しました。
最初に、インクルードが含まれていないことに気付きましたが、php.ini
を構成して変更しました。
しかし、現在、関数を含むファイルを含めようとすると、関数が認識されません。
たとえば、functions.php
という名前のファイルがあります。
<?php
function doit(){
echo "did it";
}
?>
そしてそれを含むファイルはindex.phpと呼ばれます
<?php include("functions.php"); doit();?>
そして私はこのエラーメッセージを受け取ります
致命的なエラー:4行目のindex.phpの未定義関数doit()への呼び出し
ですから、同じ問題が発生しているためにこのフォーラムでつまずく人がいたら、何が、なぜ失敗したのかを説明しましょう。
ディレクトリにない関数(c://やfile://など)を含めるが、代わりにhttpを使用して含める場合。インクルードはファイルにエコーされたものだけを返すことができますが、変数や関数などは表示されません。したがって、常にディレクトリを通じて関数と変数を含める
インクルードされたファイルからファイルをインクルードする場合など、現在のディレクトリが想定したものと異なる場合があります。
$_SERVER['DOCUMENT_ROOT']
私のインクルードで、常に自分のサイトのルートから絶対に参照できるようにします。
<?php
include($_SERVER['DOCUMENT_ROOT']."/includes/functions.php");
doit();
?>
インクルードディレクトリがドキュメントルートの上にある場合は、..
は引き続きルートから参照します。
Includeの代わりにrequire()を試してください。おそらくincludeが失敗し、エラーが表示されていません。
私もその問題を抱えています。
私の場合、「functions.php」ファイルである可能性があることがわかりました。権限が拒否されました。
サーバーで「chmod 777 functions.php」を試してみてください。
Functions.phpをWebサーバーで実行できるようにします。
Thatjuanに感謝します。require()を使用するように変更すると、サーバーは正しいエラーメッセージを表示します。
私にとっての問題は、インクルードされたファイルの関数名が、初期ファイルの関数と同じ名前であることによるものでした。
すべての関数名を一意にし、問題はなくなりました。
これは奇妙です。以下があります。
include_once('assets\include\page-essentials\functions-init.php');
include_once('assets\include\page-essentials\functions-api.php');
include_once('assets\include\php\results.php');
include_once('assets\include\page-essentials\url-availability.php');
//require($_SERVER['DOCUMENT_ROOT']."\FBH-2020\assets\include\php\boatfeaturecode.php");
require("\assets\include\php\boatfeaturecode.php");
最初の3つには、すべての関数が含まれ、すべての作業が含まれます(つまり、functions-init.php、functions-api.php、results.php)。
Boatfeaturecode.phpを必要とする行は機能しませんが、$ Server ['DOCUMENT_ROOT']を含むコメント行は機能します。
なぜかわかりません。
これがINCLUDEであるかどうかは関係ありませんOR REQUIREコマンドが機能するかどうかについてです。
これはIIS Windows 10の場合)です。ディレクトリ構造は標準C:\ inetpub\wwwroot \です。
私がこれらをインクルードしているファイルはC:\ inetpub\wwwroot\FBH-2020 \にあります
インクルードファイルのパスは
C:\ inetpub\wwwroot\FBH-2020\assets\--- etc最初の3/4に示されているように、完全に機能します。