Кажется, я не могу заставить функцию realpath работать с переменными, есть ли способ исправить это? Когда я использую переменные в функции, она ничего не возвращает. Я знаю, что путь работает без функции realpath, но я хочу использовать функцию realpath с моим именем пути.
realpath('./members/' . $userId . '/images/thumbs/' . $image); Отредактируйте реальный маршрут.
 http://localhost/Project/members/24/images/thumbs/avatar.png 
        
    Ну, это еще не закончено, но идеально подходит …
Посмотрите. Ваш сайт живет в двух сферах одновременно: реальный и виртуальный.
  Для пользователей сайта это виртуальный веб-сервер, и вы должны понимать очень важную вещь: на веб-сервере нет файлов .  Представьте, что вы вводите http://example.com/index.html в адресной строке.  Это не файл или путь, а URL-адрес, HTTP-ресурс.  Виртуальный адрес, полностью отличный от обычного файла. 
Хотя для вас, как разработчика сайта, веб-сервер представляет собой программу, запущенную на компьютере. На этом компьютере, скорее всего, есть жесткий диск и файловая система. Ваш PHP-скрипт, работая с данными или включая другие скрипты, управляет файлами на физическом диске.
  Такая разница – очень распространенная ловушка для начинающих. 
  Многие из них путают файл с гиперссылкой, пытаясь вызвать локальный файл с использованием протокола HTTP или включать файл с использованием виртуального пути из корня веб-сервера. 
Более того, есть две вещи, которые препятствуют правильному пониманию:
Будьте осторожны и не позволяйте им обманывать вас.
Ну, ведь это не ракетостроение. Просто нужно понять эти три вопроса:
root вещь и какая разница между корневой файловой системой и корнем веб-сервера Первый можно легко отличить:
  Файл принадлежит файловой системе.  Это часть данных, хранящихся на жестком диске.  Он имеет несколько атрибутов, таких как размер, время модификации, владелец, разрешения и т. Д.  Это явно атрибуты файловой системы, нет ресурсов HTTP. 
  Оба файла данных и ваши сценарии являются файлами и должны рассматриваться как таковые.  Если вы делаете что-то вроде include 'http://yoursite.com/file.php';  , вы не включаете PHP-код, как ожидалось, а просто обычный HTML – результат выполнения file.php! 
  Если вы хотите прочитать имена изображений из каталога, не читайте его с http://yoursite.com/image/ .  Это не каталог. 
С другой стороны, HTTP-ресурс – это протокол HTTP-протокола. Ваш веб-сервер – это демон, который слушает запросы. Получив запрос на определенный ресурс, идентифицированный URI, он ищет этот ресурс, и (если найден) возвращает его содержимое, сопровождаемое несколькими заголовками HTTP .
  Веб-сервер имеет собственную структуру каталогов, но очень важно понять, что эта структура каталогов является виртуальной.  Он просто напоминает реальную файловую систему, но это вовсе не файловая система.  /dir/ , /dir/file.ext , /dir/whatever – в то время как все эти пути выглядят иначе, они все одинаковы.  Это сложный вопрос, но очень важный для понимания.  В HTTP нет файлов или каталогов.  Но только ресурсы , состоящие из заголовков и тела.  Если вы запрашиваете /dir/ URI с сервера, вы получаете заголовки и тело.  Если вы запрашиваете URI /dir/file.ext с сервера, вы получаете заголовки и тело.  Каждый раз, когда вы запрашиваете что-то с сервера, вы получаете заголовки и тело.  Единственное исключение – ответ, который включает заголовки, но не тело. 
  Хотя некоторые ресурсы могут напоминать файлы, они не являются файлами.  У них нет атрибутов, но заголовков.  Это действительно другое царство.  Конечно, большинство веб-серверов времени просто находят физический файл, соответствующий запрошенному URI, и выводят его.  Но это не файл, а только содержимое файла, предшествовавшее некоторые заголовки.  Да – вот в чем разница: наиболее важно различать файл как предмет файловой системы и его содержимое.  Если вы запрашиваете то, что выглядит как каталог, вы получаете на самом деле … код HTML!  Очень важно различать каталог с точки зрения HTML-кода файловой системы, которому предшествуют некоторые заголовки.  (Конечно, вы можете получить не HTML, а некоторое содержимое двоичного файла – это всего лишь вопрос заголовка Content-type. Еще одна причина не путать реальный мир с виртуальным) 
  Вывод: 
  Если вы хотите, чтобы ваш скрипт напрямую обращался к файлу – адресуйте его как файл.  Не называйте это через HTTP!  (Обратите внимание, что ваши php-скрипты являются файлами 😉 
  Если вы хотите, чтобы один и тот же файл был доступен клиенту с использованием протокола HTTP, обратитесь к нему как к виртуальному ресурсу. 
Ну, корень – это корень. Отправная точка. Место, где все начинается.
  И файловая система, и веб-сервер имеют свои корни. 
  В системах Unix корневой файловой системой является / .  Обратите внимание, что это не просто разделитель каталогов!  Если путь начинается с этого символа, это имя конкретного каталога – корневого.  Каждый другой файл и каталог принадлежит root.  В системе Windows это довольно грязно (как обычно).  Нет общего корня файловой системы, но отдельные диски с его собственными корнями.  Он начинается с буквы диска и обратной косой черты: C:\ является корнем диска C. 
  У веб-сервера есть собственный root.  Место, где виртуальный мир встречается с реальным.  С точки зрения сервера, root веб-сервера (часто называемый DOCUMENT_ROOT) представляет собой каталог файловой системы, где веб-сервер ищет файлы, представляющие ресурсы HTTP.  Для клиента это полный квалифицированный корень – место, где начинается веб-сайт.  Он выглядит как Unix-system root – / .  Клиент ничего не знает о файловой системе сервера.  Для клиента это / является единственным корнем. 
  Вывод: 
  Всегда знайте, где находится ваш корень.  Для веб-сервера это просто: всегда / .  Для файловой системы известно, что виртуальный корень соответствует реальному миру – DOCUMENT_ROOT.  Это поможет вам найти ваши собственные файлы . 
  Это просто.  Фактически, только абсолютные пути реальны.  В то время как относительные можно вообразить, и каждый относительный путь всегда переводится в аномальный, прежде чем использовать.  Абсолютный путь неразрывно связан с root .  По сути, абсолютный путь – это путь, построенный из корня: 
Как вы можете видеть, первые два являются файловыми путями, из unix и windows соответственно, в то время как третий не может быть четко определен, но, скорее всего, является виртуальным HTTP-ресурсом.
Каждый путь, который не включает корневую директиву, является относительным. Он создается из текущего местоположения :
  Вывод : 
  Всегда используйте абсолютные пути, когда это возможно.  Он недвусмыслен и работает везде, независимо от текущего каталога.  Он может содержать переменную часть, чтобы она работала в разных средах, но в конце она всегда должна быть абсолютной. 
Действительно ли путь существует? Что касается функции realpath , путь должен быть действительным и существующим.
Поэтому, если вы используете .htaccess для создания «псевдо» путей, функция realpath не будет работать на них. Использование переменных внутри не должно иметь значения (учитывая, что они заполняются в порядке и правильны), поскольку все, что это действительно требует, является допустимой строкой.
realpath () возвращает FALSE при сбое, например, если файл не существует.
http://php.net/realpath
Проверьте свои переменные, чувак