警告:opendir():系统找不到指定的文件。 (代码:2)

I'm trying to turn the files in my 'objects' directory into an array, then use them to load the objects. But, for some reason, I continue to get this error

Warning: opendir(C:\xampp\htdocs/objects,C:\xampp\htdocs/objects): The system cannot find the file specified. (code: 2)

here is the code:

public function loadObjects(){
    $files = array();
    if ($handle = opendir(APP_PATH . 'objects')) 
    {
        while (false !== ($entry = readdir($handle))) 
        {
            if ($entry != "." && $entry != "..") 
            {
                $files[] = $entry;
            }
        }
    }

    closedir($handle);
    if(is_array($files) && count($files) > 0)
    {
        foreach($files as $value)
        {
            require_once(APP_PATH . 'objects/' . $value);
            $value = stristr($value, '.', true);
            self::$objects[$value] = new $object(self::$instance);
        }
    }
}

You are trying to open that directory with a "/".

Try to replace:

C:\xampp\htdocs/objects

to

C:\xampp\htdocs\objects


Please be sure APP_PATH variable is not null and correct values. There is no scandir function usage on your codes.

After that, i suggest you to use DirectoryIterator.

http://www.php.net/manual/en/class.directoryiterator.php

Complete example:

http://fabien.potencier.org/article/43/find-your-files

I know this is an old question but for any future viewers I will post an anwser just in case. This type of error usually comes from a simple oversight. When developing most aplication the developer usualy uses a path like http://localhost/myAppHome or http://96.82.102.233/myAppHome(if on remote server)

In this perticular case the APP_PATH is probably defined somethig like that:

define('APP_PATH',$_SERVER['DOCUMENT_ROOT']);

This will be wrong in every case when the app is being developed outside of a domain name.

$_SERVER['DOCUMENT_ROOT'] will resolve to the root of domain which in this case will be

http://localhost or http://96.82.102.233

The main directory for localhost or the IP address is going to be the diretory root of the server itself => drive:/xampp/htdocs (for example)

Basically to avoid this issue you should always mind not to ask for 'DOCUMENT_ROOT' when developing without a domain pointing to you app.

If you dont require reqular deploys you can just add the missing folder to the definition like so :

define('APP_PATH',$_SERVER['DOCUMENT_ROOT'].'/myAppHome');

In case you deploy on reqular basis and you are afraid you will forget to rever this change before depoying you can always insert an IF when defing APP_PATH like:

if($_SERVER['SERVER_NAME']=='localhost'){
     define('APP_PATH', $_SERVER['DOCUMENT_ROOT'].'/myAppHome');
}else{
     define('APP_PATH', $_SERVER['DOCUMENT_ROOT']);
}

APP_HOST = DIR folder;
APP_PATH = APP_PATH + DIR folder;
Example = "C:/xampp/htdocs" + "/parent/child/index.php"

if ($_SERVER['SERVER_NAME'] == "localhost") {

  define('APP_HOST', pathinfo($_SERVER['PHP_SELF'], PATHINFO_DIRNAME));
  define('APP_PATH', $_SERVER['DOCUMENT_ROOT'] . APP_HOST);

} else {

  define('APP_PATH', $_SERVER['DOCUMENT_ROOT']);

}