Функция chdir() завершается ошибкой, если указан путь с PHP_EOL

У меня есть PHP-код, и я получаю сообщение об ошибке, когда использую chdir для работы с именами файлов на иврите:

function GetSubFoldersArray()
{
    $subFoldersArr = array();

    $yourStartingPath = "images";
    $iterator         = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($yourStartingPath),
        RecursiveIteratorIterator::SELF_FIRST);

    foreach ($iterator as $file) {
        if ($file->isDir()) {
            $path = strtoupper($file->getRealpath());

            $path2 = PHP_EOL;

            $path3 = $path . $path2;

            $result = end(explode('/', $path3));

            array_push($subFoldersArr, $result);
        }
    }

    return $subFoldersArr;
}


$subFolders = GetSubFoldersArray();
// $response["images_arr"] = array();
$arrlength = count($subFolders);
chdir("images");

for ($x = 0; $x < $arrlength; $x++) {
    echo $subFolders[$x];
    echo "<br>";
    echo getcwd();
    echo "<br>";
    chdir($subFolders[$x]);
}

Подпапка ../images/, в которой есть символы иврита.

Мне удалось извлечь имена файлов на иврите из подпапок и поместить их все в массив. Когда я перебираю массив, я пытаюсь установить имя подпапки с помощью функции chdir(), но это не удается:

Warning: chdir() [function.chdir]: No such file or directory (errno 2) in 
/home/a2056935/public_html/android_connect/loopingDir.php on line 44.

Странно то, что когда я вручную ввожу имя подпапки:

chdir("מקום2") 

тогда он работает нормально. Но когда я пытаюсь пройти пред. создал массив подпапок, он терпит неудачу.


person Alex Batt    schedule 17.08.2013    source источник
comment
Как израильский программист, я никогда не сталкивался с необходимостью называть свои файлы на иврите. Мне интересно знать, почему вы это сделали.   -  person Madara's Ghost    schedule 17.08.2013
comment
Какой редактор вы используете для написания команд с символами иврита (которые, кстати, все еще ASCII)? Например, в блокноте ++ вы должны убедиться, что используете кодировку UTF-8.   -  person Itay    schedule 17.08.2013
comment
Спасибо за быстрый ответ, я использую notepad ++ с определенной UTF8.   -  person Alex Batt    schedule 17.08.2013
comment
Необходимость в именах подпапок на иврите связана с тем, что каждая папка представляет собой название места, которое может быть на иврите/английском или любом другом языке. каждая папка, содержащая фотографии этого определенного места.   -  person Alex Batt    schedule 17.08.2013
comment
Вы сказали, что когда вы входите в список, он терпит неудачу, как? Вы просто проверяете список эхо-подпапок?   -  person Itay    schedule 17.08.2013
comment
Не уверен, что полностью понял ваш ответ. У меня есть функция, которая создает массив имен подпапок. В основной функции я пытаюсь получить доступ к этим подпапкам, используя имена из массива. Например, если мой cwd — ../images, а вложенная папка — array[0] = מקום, мое ожидание и chdir($array[0]) приведут меня к ../imames/מקום. но это не удается.   -  person Alex Batt    schedule 17.08.2013
comment
Да, я проверяю список эхом подпапок. Я также проверил кодировку имен подпапок, и они UTF8.   -  person Alex Batt    schedule 17.08.2013


Ответы (1)


Ошибка в этих двух строках:

$path2 = PHP_EOL;
$path3 = $path . $path2;

В Windows предопределенная константа PHP PHP_EOL имеет значение \r\n. В MAC это \r, а в Linux это \n.

Массив содержит не имена подпапок, а имена, за которыми следует символ EOL. Поэтому chdir терпит неудачу.

person Lorenz Meyer    schedule 17.08.2013