Intereting Posts
Как подключить мою базу данных к Twilio Загрузить данные MySQL PHP ftp_nb_get получает локальный размер частичного файла при загрузке Границы ячеек не печатаются (кроме 1-й страницы), когда таблица охватывает несколько страниц в Firefox Как объединить два массива, создав новый массив и напечатав результат? (с кодами) Использование memcache в качестве хранилища сеансов? Совместное использование переменных сеанса в PHP между субдоменами yii2 – как установить десятичное значение валюты Включить полный каталог в PHP или Wildcard для использования в PHP Include? Как переписать .php на .html с правилами mod_rewrite От PHP / Apache, exec () или system () от root: "sudo: не удалось открыть систему аудита: Permission denied" Заменить file_get_content () с помощью cURL? Интерфейс laravel не связывает почему? Атрибут сортировки Magento по десятичной системе не алфавитно отправка почтовых данных с jquery при отправке формы

Задача функции PHP realpath

Кажется, я не могу заставить функцию 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 или включать файл с использованием виртуального пути из корня веб-сервера.

Более того, есть две вещи, которые препятствуют правильному пониманию:

  • разработчики языка, которые хотят быть «хорошими» и делать функции файловой системы также работающими с виртуальными ресурсами
  • локальный ПК, который позволяет использовать путь файловой системы для виртуального ресурса, и он будет работать. Или еще хуже, чтобы скопировать файл с клиента на сервер!

Будьте осторожны и не позволяйте им обманывать вас.

Ну, ведь это не ракетостроение. Просто нужно понять эти три вопроса:

  1. Разница между физическим файлом и виртуальным ресурсом.
  2. Что такое root вещь и какая разница между корневой файловой системой и корнем веб-сервера
  3. Разница между абсолютным и относительным.

Первый можно легко отличить:

  • HTTP-ресурс запрашивается клиентом , а не вашей программой
  • файл запрашивается вашей программой, в то время как у клиента нет доступа к нему

Файл принадлежит файловой системе. Это часть данных, хранящихся на жестком диске. Он имеет несколько атрибутов, таких как размер, время модификации, владелец, разрешения и т. Д. Это явно атрибуты файловой системы, нет ресурсов 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, обратитесь к нему как к виртуальному ресурсу.

Затем, root.

Ну, корень – это корень. Отправная точка. Место, где все начинается.

И файловая система, и веб-сервер имеют свои корни.
В системах Unix корневой файловой системой является / . Обратите внимание, что это не просто разделитель каталогов! Если путь начинается с этого символа, это имя конкретного каталога – корневого. Каждый другой файл и каталог принадлежит root. В системе Windows это довольно грязно (как обычно). Нет общего корня файловой системы, но отдельные диски с его собственными корнями. Он начинается с буквы диска и обратной косой черты: C:\ является корнем диска C.

У веб-сервера есть собственный root. Место, где виртуальный мир встречается с реальным. С точки зрения сервера, root веб-сервера (часто называемый DOCUMENT_ROOT) представляет собой каталог файловой системы, где веб-сервер ищет файлы, представляющие ресурсы HTTP. Для клиента это полный квалифицированный корень – место, где начинается веб-сайт. Он выглядит как Unix-system root – / . Клиент ничего не знает о файловой системе сервера. Для клиента это / является единственным корнем.

Вывод:
Всегда знайте, где находится ваш корень. Для веб-сервера это просто: всегда / . Для файловой системы известно, что виртуальный корень соответствует реальному миру – DOCUMENT_ROOT. Это поможет вам найти ваши собственные файлы .

Абсолютные и относительные пути.

Это просто. Фактически, только абсолютные пути реальны. В то время как относительные можно вообразить, и каждый относительный путь всегда переводится в аномальный, прежде чем использовать. Абсолютный путь неразрывно связан с root . По сути, абсолютный путь – это путь, построенный из корня:

  • /var/www/site/forum/index.php
  • с: \ Windows \ command.com
  • /img/frame.gif

Как вы можете видеть, первые два являются файловыми путями, из unix и windows соответственно, в то время как третий не может быть четко определен, но, скорее всего, является виртуальным HTTP-ресурсом.

Каждый путь, который не включает корневую директиву, является относительным. Он создается из текущего местоположения :

  • file.php
  • ./file.php
  • Изображения / picture.jpg
  • ../file.php
  • ../../file.php

Вывод :
Всегда используйте абсолютные пути, когда это возможно. Он недвусмыслен и работает везде, независимо от текущего каталога. Он может содержать переменную часть, чтобы она работала в разных средах, но в конце она всегда должна быть абсолютной.

Действительно ли путь существует? Что касается функции realpath , путь должен быть действительным и существующим.

Поэтому, если вы используете .htaccess для создания «псевдо» путей, функция realpath не будет работать на них. Использование переменных внутри не должно иметь значения (учитывая, что они заполняются в порядке и правильны), поскольку все, что это действительно требует, является допустимой строкой.

realpath () возвращает FALSE при сбое, например, если файл не существует.
http://php.net/realpath

Проверьте свои переменные, чувак