web-dev-qa-db-ja.com

PHPは機能していませんか?機能が含まれていない

状況の完全なコンテキストは次のとおりです。

最近、新しいMacを入手しました。私はphp開発者なので、MAMPをダウンロードして開発を開始しました。

最初に、インクルードが含まれていないことに気付きましたが、php.iniを構成して変更しました。

しかし、現在、関数を含むファイルを含めようとすると、関数が認識されません。

たとえば、functions.phpという名前のファイルがあります。

<?php
function doit(){
    echo "did it";
}
?>

そしてそれを含むファイルはindex.phpと呼ばれます

<?php include("functions.php"); doit();?>

そして私はこのエラーメッセージを受け取ります

致命的なエラー:4行目のindex.phpの未定義関数doit()への呼び出し

11
Tom

ですから、同じ問題が発生しているためにこのフォーラムでつまずく人がいたら、何が、なぜ失敗したのかを説明しましょう。

ディレクトリにない関数(c://やfile://など)を含めるが、代わりにhttpを使用して含める場合。インクルードはファイルにエコーされたものだけを返すことができますが、変数や関数などは表示されません。したがって、常にディレクトリを通じて関数と変数を含める

10
Tom

インクルードされたファイルからファイルをインクルードする場合など、現在のディレクトリが想定したものと異なる場合があります。

$_SERVER['DOCUMENT_ROOT']私のインクルードで、常に自分のサイトのルートから絶対に参照できるようにします。

<?php
    include($_SERVER['DOCUMENT_ROOT']."/includes/functions.php");
    doit();
?>

インクルードディレクトリがドキュメントルートの上にある場合は、..は引き続きルートから参照します。

29
Sean Adkinson

Includeの代わりにrequire()を試してください。おそらくincludeが失敗し、エラーが表示されていません。

3
SuitedSloth

私もその問題を抱えています。

私の場合、「functions.php」ファイルである可能性があることがわかりました。権限が拒否されました。

サーバーで「chmod 777 functions.php」を試してみてください。

Functions.phpをWebサーバーで実行できるようにします。

Thatjuanに感謝します。require()を使用するように変更すると、サーバーは正しいエラーメッセージを表示します。

1

私にとっての問題は、インクルードされたファイルの関数名が、初期ファイルの関数と同じ名前であることによるものでした。

すべての関数名を一意にし、問題はなくなりました。

0
Paul B

これは奇妙です。以下があります。

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に示されているように、完全に機能します。

0
Andrew Banner