Я думаю, что настоящей проблемой может быть эта строка:
$mark = substr(strrchr($upload_path, "/"), 1);
Он ищет какой-либо путь URL-адреса для конечного компонента пути, но для .../dir/upload/
произойдет сбой с косой чертой. Удобной альтернативой в этом случае будет:
$mark = basename($upload_path);
Это вряд ли когда-либо будет пустым, таким образом, избегая неудачного обнародования или разделения после этого. (Разделение строк также является неоптимальным подходом.)
Полный обходной путь может также заменить $split_url = split($mark, $img_url);
чем-то вроде:
preg_match("#$mark(/.+)$#", $img_url, $split_url);
Это обеспечит правильный формат $ img_url и вернет правильный путь к имени файла изображения, или иным образом завершится ошибкой, если он не совпадает.