为什么我在尝试运行此代码时会收到"警告:require_once(config):无法打开流:没有这样的文件或目录"?

use*_*697 1 php localhost require-once

我目前正致力于NetBeans IDE 8.0.2使用自己的在线商店进行编程PHP.我的系统是Windows 7 32位,我的localhost由WampServer 2.5提供支持.我正在关注THC课程:https://www.youtube.com/playlist? list = PLbXVpMmmrntAvOYgkqhHW0hVu8dWUNyfz

到目前为止,一切都很顺利,但我在这个视频中获得了股票:S2 {Building Framework}类和方法(p6).那个人要求在屏幕上回显一个示例文本来测试代码,但是在localhost上运行项目时我得到这两个错误消息:

警告:require_once(config):无法打开流:第2行的C:\ wamp\www\ecommerce\inc\autoload.php中没有此类文件或目录
致命错误:require_once():无法打开所需的'config'(include_path在第2行的C:\ wamp\www\ecommerce\inc\autoload.php中='.;; C:\ php\pear')

autoload.php:

<?php

    require_once('config');

    function __autoload($class_name) {

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

    }
Run Code Online (Sandbox Code Playgroud)

core.php中:

<?php

    class Core {

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

        }

    }
Run Code Online (Sandbox Code Playgroud)

index.php文件:

<?php

    require_once'inc/autoload.php';
    $core = new Core();
    $core->run();
Run Code Online (Sandbox Code Playgroud)

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()

    )));
Run Code Online (Sandbox Code Playgroud)

Riz*_*123 8

改变这个:

require_once('config');
Run Code Online (Sandbox Code Playgroud)

至:

require_once('config.php');
                   //^^^See here file extension
Run Code Online (Sandbox Code Playgroud)

(还要确保它与同一目录autoload.php,否则改变路径)

编辑:

或者尝试使用这样的绝对路径:

require_once(dirname(__FILE__) . "/config.php");
Run Code Online (Sandbox Code Playgroud)

编辑2:

由于您现在从配置文件中收到错误消息,意味着它已被包含,但仍然有一些错误!

首先是这样的:

//directory seperator
defined("DS")
||define("DS", DIRECTORY_SEPERATOR);
             //^^^^^^^^^^^^^^^^^^^ Typo must be: DIRECTORY_SEPARATOR
Run Code Online (Sandbox Code Playgroud)

下一个在这里:

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

同样的错误:

//pages folder
defined("PAGES_DIR")
||define("PAGES_DIR", pages);
                    //^^^^^
Run Code Online (Sandbox Code Playgroud)

下一个错误:

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

同样在这里:

//catalogue images path
defined("CATALOGUE_PATH")
||define("CATALOGUE_PATH", ROOTH_PATH.DS. "media" .DS."catalogue");
                         //^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

在这里,你有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()

)));
Run Code Online (Sandbox Code Playgroud)

编辑3:

在这里你可以简化这两行,我会改变要求,所以即使你把文件本身包含在另一行中它也能正常工作!像这样:

autoload.php:

function __autoload($class_name) {

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

}
Run Code Online (Sandbox Code Playgroud)

对此:

function __autoload($class_name) {

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

}
Run Code Online (Sandbox Code Playgroud)