stepigor
@stepigor
Веб-разработчик (Front-End, Back-End)

PHP не видит файл с переменной в пути, как исправить?

Добрый день. "Ломаю голову" уже второй день. Требуется открыть файл с помощью PHP, чтобы получить из него первую строку. Но PHP наотрез отказывается видеть файл, если в пути есть переменная. Файл реально существует, если переменную поменять на конкретное название, то все находится. Все усложняется тем, что переменная с названием файла берется из другого файла. Вчера удалось выяснить, что PHP не видит файл из-за кодировки переменной в пути (файл, из которого берется содержимое переменной, в кодировке UTF-8). Но я не могу найти нужную кодировку, пробовал разные способы, а именно:

1. Менял кодировку файла, откуда берется переменная с названием файла (UTF-8, windows-1251, ISO-8859-1 и некоторые другие, случайные)

2. Использовал в коде iconv, дабы принудительно сменить кодировку переменной, пробовал комбинации кодировок из первого пункта.

Очень странно. Не думал, что зависну на этом этапе. Не знаю, нужен ли код, но, думаю, лишним не будет:

while (file_exists($_SERVER['DOCUMENT_ROOT']."/accounts/".$_SESSION['email']."/searchtool/".$_GET['page']."-page".$count.".txt")){
$ac = file($_SERVER['DOCUMENT_ROOT']."/accounts/".$_SESSION['email']."/searchtool/".$_GET['page']."-page".$count.".txt");
$name = $ac[1];
									
$fstatus = $ac[0];
									
if ($fstatus == 1){
$status = "В обработке";
} elseif ($fstatus == 2){
$status = "Отказано";
} else {
$fclicks = file($_SERVER['DOCUMENT_ROOT']."/click/".$fstatus);
$clicks = $fclicks[0];
$status = $clicks." кликов";
}
}


Именно в $fstatus и лежит название файла. С помощью echo выводил и весь путь полностью, если его скопировать и поставить вместо кода, то файл виден. Если вместо $fstatus поставить название файла, то все тоже находится. А вот в таком виде нет. Что посоветуете? Благодарю.

P.S. Смотрите условный блок, а именно else, он всегда выполняется.
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ответы на вопрос 1
SerafimArts
@SerafimArts
Senior Notepad Reader
Что посоветуете?


Никогда и ни при каких случаях не именовать директории, так, чтобы они не соответствовали [a-zA-Z0-9_\.]+ паттерну, причём от точки в начале наименования тоже желательно отказаться. Иначе проблем может быть не то что бы гора, а чуть больше:
1) Некоторые *nix ОС имеют кодировку KOI8-R
2) Некоторые *nix UTF-8
3) Некоторые cp866
4) Некоторые сp1251
5) Некоторые UTF-16

Осталось методом тыка подобрать, причём прошу заметить, что никто не гарантирует, что она не изменится при очередном обновлении ОС.

Если же сабжевых символов (например кириллицы) нет, то как завещал автор выше - дебажить:
1) xdebug + breakpoints
2) var_dump
3) print_r
4) Или почитать мануал по php и найти чуть более заковыристые штуки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы