PEAR2 wiki (когда это существовало) раньше перечислял серьезные основания для отказа весь требовать/включать директивы в пользу автозагрузки луг, по крайней мере, для кода библиотеки. Они привязывают Вас к твердым структурам каталогов, когда альтернативные упаковочные модели как phar находятся на горизонте.
Обновление: Поскольку заархивированная версия сети Wiki является ужасным глазом-gougingly, я скопировал наиболее неопровержимые доводы ниже:
- include_path требуется для использования (ГРУША) пакета. Это мешает связывать ГРУШЕВЫЙ пакет в рамках другого приложения с его собственным include_path, создавать единственный файл, содержащий необходимые классы, перемещать ГРУШЕВЫЙ пакет в архив phar без обширной модификации исходного кода.
- , когда верхний уровень require_once смешан с условным выражением require_once, это может привести к коду, который является некэшируемым кэшами кода операции, такими как APC, который будет связан PHP 6.
- относительный require_once требует, чтобы include_path уже были установлены до правильного значения, лишив возможности использовать пакет без надлежащего include_path
Благодарности: karim79 и Titanous.
Запишите код в контроллер
Для IP-адреса клиента:
request.remote_ip
@remote_ip = request.env["HTTP_X_FORWARDED_FOR"]
Для IP-адреса сервера:
require 'socket'
def local_ip
orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily
UDPSocket.open do |s|
s.connect '64.233.187.99', 1
s.addr.last
end
ensure
Socket.do_not_reverse_lookup = orig
end
С вашего контроллера:
request.remote_ip
Если вы используете apache перед дворнягой, тогда remote_ip вернет исходный адрес запроса, который в данном случае будет локальным хостом, потому что Apache веб-сервер делает запрос, поэтому вместо этого поместите это в свой контроллер:
@remote_ip = request.env["HTTP_X_FORWARDED_FOR"]
Чтобы получить IP-адрес сервера, см .: