На сервере, который я использую (запущен php_fastcgi5), в корневом каталоге, содержащем эту директиву, есть файл .htaccess, чтобы отключить magic_quotes_gpc:
php_flag magic_quotes_gpc off
Вывод phpinfo () сообщает, что локальное значение для magic_quotes_gpc действительно отключено. (Однако основное значение "включено".)
Я не уверен, точно ли это сообщение, во-первых, потому что я прочитал это сообщение, а во-вторых, потому что следующий код использование подготовленных операторов PDO по-прежнему заканчивается вставкой обратной косой черты в запись базы данных:
<?php
$db = new PDO('mysql:host=example.com;dbname=my_database_name;charset=utf8', 'database_user', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$output = '<p>Post some text which includes some apostrophes:</p><form name="form" action="test.php" method="post"><input type="text" size="60" name="string" value="The server\'s not behaving as it\'s supposed to." /><br /><br /><input type="submit" value="Post" /></form><br />----------<br />';
if (isset($_POST['string'])) {
$PostedString = $_POST['string'];
$InsertQuery = $db->prepare("INSERT INTO `test` (string) VALUES (?)");
$SuccessfulInsertion = $InsertQuery->execute(array($PostedString));
if ($SuccessfulInsertion) {
$ReadStatement = $db->prepare('SELECT * FROM `test` ORDER BY `id`');
$ReadStatement->execute();
$ReadStatement->setFetchMode(PDO::FETCH_ASSOC);
while($row = $ReadStatement->fetch()) {
$ThisString = $row['string'];
$output .= '<p>'.$ThisString.'</p>'.$CR;
}
}
}
echo $output;
?>
Кто-нибудь знает, почему текст, вставленный в базу данных с использованием этого кода, по-прежнему приводит к записи db с косой чертой, добавленной перед апострофами?
Это потому, что PHP работает как php_fastcgi5 (т.е. директива .htaccess для отключения magic_quotes_gpc не работает из-за этого)? Если да, есть ли обходной путь? (У меня нет доступа к файлу php.ini.)
var_dump($_POST);
, он сбежал оттуда? Если так ... на этом сервере происходит что-то подозрительное, если он по-прежнему заявляет, чтоmagic_quotes_gpc
выключен. Никаких автоматических добавлений или другого кода, который возился с данными до этого? - person Wrikken   schedule 18.06.2012value="The server\'s not behaving as it\'s supposed to."
- person Marcus Adams   schedule 18.06.2012var_dump($_POST);
показывает, что на выходе есть обратная косая черта. Нет другого кода, кроме того, что я изложил выше. - person John Doe   schedule 18.06.2012phpinfo();
говорит, что нет волшебных кавычек и нет автоматического добавления ... что-то вставляет эти кавычки. Вы владелец сервера? Если нет, спросите владельца, установил / настроил ли он что-то, что может делать это. - person Wrikken   schedule 18.06.2012magic_quotes_gpc
- Off (а главное значение - On), хотя есть проблема, обсуждаемая в сообщении, на которое я ссылался выше, который немного запутывает это. Я попросил поддержки у хостинг-компании, владеющей сервером, но они мне не помогли; они, кажется, не знают ответа. Как я уже упоминал, у меня было смутное воспоминание, что это может иметь какое-то отношение к тому, что PHP скомпилирован как php_fastcgi5, не разрешающий директиву .htaccess, хотя я не уверен в этом и не могу найти никакой ссылки на эту идею. - person John Doe   schedule 18.06.2012.htaccess
не был прочитан, значение также будетoff
, и уязвимость (к счастью) только вcgi
, а НЕ вfastcgi
реализации. Однако причина выбора fastcgi вместо php в качестве модуля часто заключается в пользовательских настройках и владении для каждого клиента, другими словами, также с индивидуальнымphp.ini
файлом для каждого клиента. Может ли это предоставить вам ваш хостинг-провайдер? - person Wrikken   schedule 18.06.2012off
, когда оно будет единым ... Этот настраиваемый php.ini кажется подходящим вариантом. - person Wrikken   schedule 18.06.2012