Запустите Magento с локального хоста на Mac


Хотя можно установить Magento локально, я, похоже, не могу заставить Magento фактически устанавливать файлы cookie в администраторе при входе в систему, если я использую имя хоста localhost:8080.

Проработав некоторое время с Magento, я знаю об этом ограничении и локальной модификации Mage_Core_Model_Session_Abstract_Varien, чтобы изменить эту проверку:

 if (isset($cookieParams['domain'])) {
    $cookieParams['domain'] = $cookie->getDomain();
 }

К этому:

 if (isset($cookieParams['domain']) && !in_array('127.0.0.1', self::getValidatorData())) {
    $cookieParams['domain'] = $cookie->getDomain();
 }

Это хорошо работает для большинства локальных сред разработки. Однако это не работает для Mac. Я ищу компьютер на базе OSX решение.

Я использую веб-сервер PHP 5.4, и это только для образовательных/экспериментальных целей. В производстве я предпочитаю Apache под Linux. Это было бы не для производственных целей - смотрите Мой ответ ниже для получения более подробной информации о том, как PHP интерпретирует локальный адрес для IPv6.

Author: philwinkle, 2013-05-10

3 answers

При запуске вашего веб-сервера вы можете указать localhost или 127.0.0.1 - имя, которое вы указываете, не имеет значения, это не объявление виртуального хоста, это просто для указания адреса прослушивания.

Но вам нужно иметь в виду, что ваша ОС может разрешить localhost на свой IPv6-адрес, а не на адрес IPv4, поэтому она будет прослушивать не тот протокол.

Поэтому будьте откровенны и используйте 127.0.0.1 при указании адреса прослушивания.

Но тогда для вашего магазина просто определите другое имя хоста, как предложил Алан, которое все еще указывает на 127.0.0.1 в вашем файле HOSTS.

Веб-сервер PHP не прослушивает трафик, предназначенный для него для определенного сервера/имени хоста - он просто прослушивает что-либо вообще на этом IP:порту - почти как файл 000-default при чистой установке Apache.

Поэтому просто убедитесь, что вы установили Magento с любым именем хоста (кроме localhost!), При условии, что в нем есть запись HOSTS, указывающая на 127.0.0.1

Вам никогда не нужно редактировать любые основные файлы, чтобы это работало.

ПРИМЕЧАНИЕ.

::1 != 127.0.0.1

Они оба указывают на одну и ту же машину, но не на один и тот же протокол.

 3
Author: Ben Lessani - Sonassi, 2013-05-10 22:51:25

На протяжении многих лет в OS X возникали многочисленные проблемы и регрессии, когда браузеры на основе webkit неправильно устанавливали файлы cookie для домена localhost. Если это одна из проблем, с которой вы столкнулись, вы мало что можете сделать, чтобы исправить ее на стороне сервера - это проблема на стороне клиента. Доменное имя localhost в конечном итоге обрабатывается иначе, чем другие доменные имена.

Не совсем то, что вы просили, но лучший способ решить эту проблему - не использовать localhost в качестве доменного имени, и вместо этого используйте свой файл /etc/hosts для настройки пользовательских доменных имен разработки magento.dev, www.magento.dev, etc, которые указывают на 127.0.0.1.

 1
Author: Alan Storm, 2013-05-10 21:47:03

На компьютере Mac измените изменение Mage_Core_Model_Session_Abstract_Varien на следующее:

 if (isset($cookieParams['domain']) && !in_array('::1', self::getValidatorData())) {
            $cookieParams['domain'] = $cookie->getDomain();
 }

Это работает, потому что ::1 находится localhost в OSX, как показал анализ remote_addr, о котором сообщает self::getValidatorData():

array(4) {
  ["remote_addr"]=>
  string(3) "::1"
  ["http_via"]=>
  string(0) ""
  ["http_x_forwarded_for"]=>
  string(0) ""
  ["http_user_agent"]=>
  string(119) "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"
}

Изменить:

Адрес ::1 является эквивалентом IPv6 127.0.0.1 - это 128-битное число, первые 127 битов которого равны "0", а 128-й бит равен "1". Это всего лишь один адрес, поэтому его также можно записать как::1/128.

В случае Apache (или другой веб-сервер) настраивается на использование IPv6-адресации для локального

Смотрите Этот пост SO для получения дополнительной информации о том, как заставить PHP возвращать адрес IP4 вместо этого - по сути, настройте свой vhost для прослушивания адреса IP4 - например Listen 127.0.0.1:80:

Https://stackoverflow.com/questions/3699454/should-ip-serverremote-addr-return-1-on-a-mamp-localhost

Другие Источники: http://ipv6exchange.net/questions/16/what-is-the-loopback-127001-equivalent-ipv6-address

Отказ от ответственности

В моем случае, однако, я не использую Apache, поэтому предлагаемое решение было предпочтительнее, и этот ответ опубликован в качестве руководства для тех, кто хочет настроить локальную разработку на OSX, в частности, со встроенным веб-сервером PHP. Кроме того, вы никогда не должны фиксировать это исправление в какой-либо системе управления версиями, и его не следует использовать в рабочей среде окружающая среда

 0
Author: philwinkle, 2017-05-23 12:37:13