Как выключить волшебные кавычки на общем хостинге?

Не существует соглашения об использовании конкретно com для первого сегмента имен пакетов. Действительно, сама стандартная библиотека Java этого не делает. Даже если вы ограничите свое рассмотрение пакетами, производимыми сторонними организациями, которые имеют , имеют ДВУ, они не всегда заканчиваются на .com. На самом деле особое значение имеют домены .org, такие как проект Apache.

В целом,

  • действительно выбирают отличительное имя пакета. Он не обязательно должен иметь более одного сегмента.
  • Если вы не собираетесь основывать его на обратном доменном имени, то не запускайте его с com, org или чем-то еще, что может столкнуться или иным образом путаться с обратным доменное имя.
  • Выбрав имя пакета, do расположите ваши источники в обычном формате относительно этого имени. Следовать этой схеме не обязательно, но это избавит вас от многих неприятностей. Многие инструменты ожидают такого макета или, по крайней мере, лучше с ним работают.
41
задан Dukeling 2 November 2013 в 18:49
поделиться

8 ответов

Согласно руководству можно часто устанавливать пользовательский php.ini на общем хостинге, где mod_php не используется и php_value директива таким образом приводит к ошибке. Для установок suexec/FastCGI довольно распространено иметь на - webspace php.ini в любом случае.

--

Я не думаю, что O (прописная буква o) является допустимым значением для установки флага ini. Необходимо использовать истинное/ложное, 1/0, или "на" / "от" значения.

ini_set( 'magic_quotes_gpc', 0 );   // doesn't work

Править

После проверки списка ini настроек я вижу, что magic_quotes_gpc является a PHP_INI_PERDIR при установке (после 4.2.3), что означает, Вы не можете изменить его с ini_set() (только PHP_INI_ALL настройки могут быть изменены с ini_set())

То, что это означает, является Вами, должны использовать .htaccess файл, чтобы сделать, это - ИЛИ - реализует сценарий для инвертирования эффектов волшебных кавычек. Что-то вроде этого

if ( in_array( strtolower( ini_get( 'magic_quotes_gpc' ) ), array( '1', 'on' ) ) )
{
    $_POST = array_map( 'stripslashes', $_POST );
    $_GET = array_map( 'stripslashes', $_GET );
    $_COOKIE = array_map( 'stripslashes', $_COOKIE );
}
42
ответ дан NullUserException 27 November 2019 в 00:17
поделиться

php_flag и php_value в .htaccess файле технически корректны - но для PHP, установленного как модуль Apache только. На общем хосте Вы почти никогда не будете находить такую установку; PHP выполняется как CGI вместо этого, по причинам, связанным с безопасностью (не допускающий Ваших соседей сервера в Ваши файлы), и путь phpsuexec запускает скрипты как 'Вас' вместо апачского пользователя.

Apache является таким образом корректным предоставлением Вам ошибка сервера: это не знает о значении php_flag, если модуль PHP не загружается. Двоичный файл CGI является к Apache внешней программой вместо этого, и Вы не можете настроить его из Apache.

Теперь для хороших новостей: можно настроить конфигурацию на каталог, помещающую там файл, названный' php.ini ' и устанавливающую там инструкции с помощью того же синтаксиса как в основном php.ini системы. руководство PHP перечисляет все устанавливаемые директивы: можно установить отмеченных с PHP_INI_PERDIR или PHP_INI_ALL, в то время как только системный администратор может установить их отмеченный PHP_INI_SYSTEM в php.ini всего сервера.

Примечание, что такие директивы php.ini не наследованы подкаталогами, необходимо будет дать им их собственный php.ini.

10
ответ дан djn 27 November 2019 в 00:17
поделиться

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

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

//using mysqli

public function escapeString($stringToBeEscaped) {

    return $this->getConnection()->real_escape_string(stripslashes($stringToBeEscaped));
}
0
ответ дан Philip Morton 27 November 2019 в 00:17
поделиться
  1. это работает при удалении строки AddType? Я не совсем уверен, почему это относится к выключению волшебных кавычек.

  2. , Если PHP не работает под mod_php, htaccess не будет работать. Это работает CGI?

Это один для Вашей хостинговой компании действительно.

0
ответ дан Philip Reynolds 27 November 2019 в 00:17
поделиться

В то время как я не могу сказать, почему php_flag дает Вам 500 Internal Server Errors, я укажу, что руководство PHP имеет пример обнаружения, если волшебные кавычки идут и разделение его от superglobals во времени выполнения. В отличие от других отправленных, этот является рекурсивным и правильно разделит кавычки от массивов:

Обновление: Я заметил сегодня, что существует новая версия следующего кода руководства PHP, которое использует ссылки на super-globals вместо этого.

Старая версия:

<?php
if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value)
    {
        $value = is_array($value) ?
                    array_map('stripslashes_deep', $value) :
                    stripslashes($value);

        return $value;
    }

    $_POST = array_map('stripslashes_deep', $_POST);
    $_GET = array_map('stripslashes_deep', $_GET);
    $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}
?>

Новая версия:

<?php
if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
?>
30
ответ дан Powerlord 27 November 2019 в 00:17
поделиться

Ответ BaileyP уже довольно хорош, но я использовал бы это условие вместо этого:

if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc() === 1){
  $_POST = array_map( 'stripslashes', $_POST );
  $_GET = array_map( 'stripslashes', $_GET );
  $_COOKIE = array_map( 'stripslashes', $_COOKIE );
}

Это - больше обороны.

0
ответ дан middus 27 November 2019 в 00:17
поделиться

Если Вы не можете выключить его, вот то, что я обычно делаю:

get_magic_quotes_gpc() ? $_POST['username'] : mysql_real_escape_string($_POST['username']);

Это будет помещено в базу данных в своем соответствующем формате.

-1
ответ дан Joe Phillips 27 November 2019 в 00:17
поделиться

Если вы используете PHP 5.3+, то это поможет вам, поместите его в самую верхнюю часть страницы:

if (get_magic_quotes_gpc() === 1)
{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
}

Обрабатывает ключи, значения и многомерные массивы.

2
ответ дан 27 November 2019 в 00:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: