Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: На локальном хосте работает, на реальном - нет. Почему?

Сообщения:  [1-10]   [11-17] 

 
 автор: coloboc66   (01.06.2007 в 12:55)   письмо автору
 
   для: mihdan   (31.05.2007 в 18:15)
 

$text=htmlspecialchars(stripslashes($text)); - здесь stripslashes убрал
Проблему с магическими кавычками решил - их нужно было проверять (как говорил Хеопс) не в одном файле (send.php), а в двух (becom.php)
Осталась проблема с нарезкой длинной строки на кириллице. Вот эта функция на латинице работает, а на кириллице - нет:

$text=htmlspecialchars($_POST['text']);
$text = preg_replace_callback("|(\w{30,})|","split_text",$text);
function split_text($matches) 
{
  return wordwrap($matches[1], 20, ' ',1);

   
 
 автор: Trianon   (31.05.2007 в 19:14)   письмо автору
 
   для: coloboc66   (31.05.2007 в 14:17)
 


$text=$_POST['send']; 
$text=htmlspecialchars(stripslashes($text)); 

htmlspecialchars(stripslashes зачем здесь?




echo "<span>".$value."</span>"; 

И почему htmlspecialchars() нет здесь?

   
 
 автор: kasmanaft   (31.05.2007 в 18:56)   письмо автору
 
   для: coloboc66   (31.05.2007 в 11:50)
 

Попробуйте написать в него
php_flag magic_quotes_gpc off

   
 
 автор: mihdan   (31.05.2007 в 18:15)   письмо автору
 
   для: coloboc66   (31.05.2007 в 10:43)
 

setlocale(), stripslashes()

   
 
 автор: coloboc66   (31.05.2007 в 14:17)   письмо автору
 
   для: Trianon   (31.05.2007 в 12:38)
 

В файле index.php находится текстареа для вводимого сообщения. Кодировка файла: windows-1251. По причине использования аякса для отправки и приема данных для кроссбраузерности отсылаемую строку перед отправкой кодирую в encodeURIComponent(). В файле send.php с header("Content-type: text/plain; charset=UTF-8") записываю эту строку в файл:
Файл send.php

header("Content-type: text/plain; charset=UTF-8"); 
$text=$_POST['send'];
$text=htmlspecialchars(stripslashes($text));
$text = preg_replace_callback("|(\w{30,})|","split_text",$text);
$text=$_SESSION['user'].': '.$text."[".$today."]"."\r\n";
fwrite($fp,$text);
function split_text($matches) 
{
  return wordwrap($matches[1], 20, ' ',1);
}

Файле index.php с некоторой периодичностью отправляет файлу becom.php последнюю строку из загруженных в филдсет (или строку "null", если ни одного сообщения не загружено).
Файл becom.php

header("Content-type: text/plain; charset=UTF-8");
$a=$_POST['resp'];
for($i=0;$i<count($msg);$i++)
    {
       if(@strstr($msg[$i],$a)!==false) //если последнее сообщение, принятое от броузера, совпадает с одним из имеющихся в файле
       {
        searsh($i,$msg);//вызываем функцию поиска в файле сообщений, более свежих, чем принятое
       } 
function searsh($k;$msg)    
{     
for($i=0;$i<count($msg1);$i++)
{
$value=$msg1[$i];
 $value=nl2br($value);
 echo "<span>".$value."</span>";
}
}

В файле index.php сообщение, полученное от becom.php , обрабатывается с помощью decodeURIComponent() и записывается в филдсет.
На локальном хосте все работает, на реальном (с русским апачем) выявил две проблемы:
1. При вводе слеша \ он записывается в файл и выводится в филдсет, все последующие сообщения в файл записываются, но броузеру не отправляются.
echo get_magic_quotes_gpc(); на реальном хосте выдает 1, на локальном выдает 0.
Как можно её выключить?
2. Функция разбиения длинной строки в файле send.php на реальном хосте с кириллицей не работает.

   
 
 автор: Trianon   (31.05.2007 в 12:38)   письмо автору
 
   для: coloboc66   (31.05.2007 в 11:52)
 

А дальше Вы её из файла читаете и отправляете с сервера - клиенту. .
Каким образом?

   
 
 автор: coloboc66   (31.05.2007 в 11:52)   письмо автору
 
   для: Trianon   (31.05.2007 в 11:41)
 

Дальше записываю её в файл. Принцип работы моего чата таков: с заданной периодичностью броузер отправляет на сервер самую свежую (последнюю ) строку из загруженных с сервера, а на сервере эта строка сравнивается со строками, находящимися в файле сообщений, и если есть строки, более свежие, чем эта, то сервер отправляет эти строки броузеру...

   
 
 автор: coloboc66   (31.05.2007 в 11:50)   письмо автору
 
   для: kasmanaft   (31.05.2007 в 11:13)
 

А в .htaccess можно магические кавычки выключить?

   
 
 автор: Trianon   (31.05.2007 в 11:41)   письмо автору
 
   для: coloboc66   (31.05.2007 в 10:43)
 

А что Вы делаете с этой строкой дальше?
Просмотреть echo $_POST['text'] можно только при отладке. А истинная цель?

   
 
 автор: Trianon   (31.05.2007 в 11:39)   письмо автору
 
   для: kasmanaft   (31.05.2007 в 11:13)
 

>Проверить включены они или нет можно с помощью ф-ии get_magic_quotes_gpc(). Если выключены, строку стоит обработать вручную.

вреднейшее заблуждение.

Если они включены - надо выключить.
На случай, если не получается выключить - при включенных кавычках - нужно обработать строку обратно (как показал cheops).
Обрабатывать же строки "вручную" при дальнейших манипуляциях, связанных со сменой языка, нужно в любом случае.

У colobok66 явно меняется язык... И он эту точку принятия решения упускает.
Но кто сказал, что следующий язык - это именно язык литеральных констант MySQL (JS)?

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования