Дело в том, что имя файла в компьютере и имя файла в сети - это "две большие разницы". Об этом
Invis1ble пытается упорно объяснить

Поэтому для парсинга имен файлов надо использовать функции, специально для каждой цели предназначенные. Но ты его не слышишь.
Для поиска ошибок существует единственный "правильный" путь: отладка. Вариантов отладки может быть несколько. Один из них - выводить данные на каждом шаге, как только что-либо меняется или назначается. И смотришь, что у тебя там: то, что должно быть или не то, что должно быть.
Второй вариант - писать данные в некий лог (это очень хорошо, когда работаешь с "боевым" сайтом) и потом анализировать содержимое лога. Туда также выводишь все важные данные, на каждом шаге, как только что-то меняется.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)