1. ホーム
  2. php

[解決済み] なぜ「Warning: require_once(config): failed to open stream: このコードを実行しようとすると、"Warning: require_once(config): failed to open stream: No such file or directory" と表示されるのですが?

2022-02-03 06:52:16

質問内容

現在、自分専用のオンラインショップのプログラミングに取り組んでいます。 NetBeans IDE 8.0.2 を使って PHP . 私のシステムはWindows 7 32bitで、私のlocalhostはWampServer 2.5で動いています。私はTHCのコースに従っています。 https://www.youtube.com/playlist?list=PLbXVpMmmrntAvOYgkqhHW0hVu8dWUNyfz

ここまでは順調だったのですが、この動画で在庫を確保しました。S2{フレームワークの構築}」。クラスとメソッド(p6)。この人はコードをテストするためにサンプルテキストを画面にエコーするように言っているのですが、プロジェクトをlocalhostで実行すると、この2つのエラーメッセージが表示されます。

Warning: require_once(config): failed to open stream: No such file or directory in C:\wangwang.com on line 2
Fatal error: require_once(): Failed opening required 'config' (include_path='.;C:\phppear') in C:\wamp.wwwecommerce.php on line 2

autoload.php。

<?php

    require_once('config');

    function __autoload($class_name) {

        $class = explode("_", $class_name);
        $path = implode("/", $class).".php";
        require_once($path);

    }

Core.phpです。

<?php

    class Core {

        public function run() {
            echo "Hello this is a print test";

        }

    }

index.phpです。

<?php

    require_once'inc/autoload.php';
    $core = new Core();
    $core->run();

config.phpを使用します。

<?php

    if(!isset($_SESSION)) {
        session_start();

    }

    //site domain name with http
    defined("SITE_URL")
    ||define("SITE_URL", "http://".$_SERVER['SERVER_NAME']);

    //directory seperator
    defined("DS")
    ||define("DS", DIRECTORY_SEPERATOR);

    //root path
    defined("ROOT_PATH")
    ||define("ROOT_PATH", realpath(dirname(__FILE__) .DS.".." .DS));


    //classes folder
    defined("CLASSES_DIR")
    ||define("CLASSES_DIR", classes);

    //pages folder
    defined("PAGES_DIR")
    ||define("PAGES_DIR", pages);



    //modules folder
    defined("MOD_DIR")
    ||define("MOD_DIR", "mod");


    //inc folder
    defined("INC_DIR")
    ||define("INC_DIR", "inc");


    //templates folder
    defined("TEMPLATE_DIR")
    ||define("TEMPLATE_DIR", "template");

    //emails path
    defined("EMAILS_PATH")
    ||define("EMAILS_PATH", ROOTH_PATH.DS. "emails");

    //catalogue images path
    defined("CATALOGUE_PATH")
    ||define("CATALOGUE_PATH", ROOTH_PATH.DS. "media" .DS."catalogue");


    //add all above directories to the include path
    set_include_path(implode(PATH_SEPERATOR, array(
    realpath(ROOTH_PATH.DS.CLASSES_DIR),
    realpath(ROOTH_PATH.DS.PAGES_DIR),
    realpath(ROOTH_PATH.DS.MOD_DIR),
    realpath(ROOTH_PATH.DS.INC_DIR),
    realpath(ROOTH_PATH.DS.TEMPLATE_DIR).
    get_include_path()

    )));

解決方法は?

これを変更します。

require_once('config');

になります。

require_once('config.php');
                   //^^^See here file extension

(と同じディレクトリにあることを確認してください)。 autoload.php そうでない場合はパスを変更してください)

EDITです。

または、次のように絶対パスでiを試してみてください。

require_once(dirname(__FILE__) . "/config.php");

EDIT 2:

設定ファイルからエラーメッセージが表示されるようになったので、インクルードされたものの、まだエラーがあるということです

一つ目はこれでしょう。

//directory seperator
defined("DS")
||define("DS", DIRECTORY_SEPERATOR);
             //^^^^^^^^^^^^^^^^^^^ Typo must be: DIRECTORY_SEPARATOR

次はこちらです。

//classes folder
defined("CLASSES_DIR")
||define("CLASSES_DIR", classes);
                      //^^^^^^^ This isn't a constant so if it is a string put quotes around it

こちらも同じエラーです。

//pages folder
defined("PAGES_DIR")
||define("PAGES_DIR", pages);
                    //^^^^^

次のエラーはここです。

//emails path
defined("EMAILS_PATH")
||define("EMAILS_PATH", ROOTH_PATH . DS .  "emails");
                      //^^^^^^^^^^ Typo must be: ROOT_PATH , you have one h too much

こちらも同じです。

//catalogue images path
defined("CATALOGUE_PATH")
||define("CATALOGUE_PATH", ROOTH_PATH.DS. "media" .DS."catalogue");
                         //^^^^^^^^^^

そして、このパースのあちこちに、6つのタイプミスがありますね。

//add all above directories to the include path
set_include_path(implode(PATH_SEPERATOR, array(
                       //^^^^^^^^^^^^^^ Typo must be: PATH_SEPARATOR 
realpath(ROOTH_PATH.DS.CLASSES_DIR),
       //^^^^^^^^^^ Typo must be: ROOT_PATH , you have one h too much
realpath(ROOTH_PATH.DS.PAGES_DIR),
       //^^^^^^^^^^
realpath(ROOTH_PATH.DS.MOD_DIR),
       //^^^^^^^^^^
realpath(ROOTH_PATH.DS.INC_DIR),
       //^^^^^^^^^^
realpath(ROOTH_PATH.DS.TEMPLATE_DIR).
       //^^^^^^^^^^
get_include_path()

)));

EDIT 3:

この2行を簡略化することができますし、私はrequireを変更して、ファイル自体を別のファイルにインクルードしても動作するようにしたいと思います このように。

autoload.php。

function __autoload($class_name) {

    $class = explode("_", $class_name);
    $path = implode("/", $class).".php";
    require_once($path);

}

をこれに変更します。

function __autoload($class_name) {

    $path = str_replace("_", "/", $class_name) . ".php";
    require_once(dirname(__FILE__) . "/" . $path);

}