Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Может ли PHP обработать полный html перед показом ?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Zend
Отправлено: 10 Ноября, 2010 - 14:16:30
Post Id


Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Может ли PHP после генерации html не сразу отдавать его браузеру, а отдать другому скрипту ?
Задача: заключить каждую внешнюю ссылку в тег <noindex> и добавить атрибут rel="nofollow" . Ссылки могут находится в любой части html кода.
Нужен именно вариант на PHP, устанавливать на сервер дополнительные модули нельзя.
 
 Top
Uchkuma
Отправлено: 10 Ноября, 2010 - 14:21:06
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




 
 Top
Roler
Отправлено: 10 Ноября, 2010 - 14:21:31
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




(Отредактировано автором: 10 Ноября, 2010 - 14:21:51)

 
 Top
Zend
Отправлено: 10 Ноября, 2010 - 15:54:39
Post Id


Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Т.е. можно подключить в самый верх и в самый низ 2 скрипта с ob_start ?
 
 Top
Uchkuma
Отправлено: 10 Ноября, 2010 - 18:40:31
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Чего чего?
 
 Top
ZeiZ
Отправлено: 11 Ноября, 2010 - 04:25:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009  
Откуда: Москва


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. include ("output.php"); // весь код собирается в этом файле
  2. $html = ob_get_contents(); // весь вывод сформирован в хтмл
  3. $html = str_replace("%TITLE%",$TITLE, $html);
  4. exit($html);


Для примера. Ниндзя
 
 Top
JustUserR
Отправлено: 11 Ноября, 2010 - 09:25:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




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


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Zend
Отправлено: 11 Ноября, 2010 - 21:59:04
Post Id


Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Февр. 2010  


Помог: 0 раз(а)




Без буферизации возможно это? Надо это сделать на очень сложной CMS, буферизация и невозможно. Надо именно перехватывать сгенерированный html.
 
 Top
Uchkuma
Отправлено: 11 Ноября, 2010 - 22:06:29
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Возможно ваша cms уже использует буферизацию. В этом случае вам необходимо просто в нужном месте вызвать ob_get_contents, обработать буфер и вывести его с помощью того же echo.
 
 Top
vlom
Отправлено: 12 Ноября, 2010 - 12:44:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010  
Откуда: Екатеринбург


Помог: 4 раз(а)




вот пример простенького буфера
PHP:
скопировать код в буфер обмена
  1. <?PHP ## Автоматизация вызова ob_end_clean().
  2. // Упрощает перехват выходного потока в скриптах.
  3. // Гарантировано вызывает ob_end_clean() при выходе объекта
  4. // класса за текущую область видимости.
  5. class buffering {
  6.   // Содержимое буферов разных уровней.
  7.   private static $buffers = array();
  8.   // Уровень вложенности текущего объекта.
  9.   private $level;
  10.   // Буфер уже был уничтожен (например, выведен в браузер).
  11.   private $flushed;
  12.   // Запускает новый буфер перехвата выходного потока.
  13.   public function __construct($handler=null) {
  14.     // Вначале запоминаем предыдущее содержимое буфера.
  15.     $prevLevel = ob_get_level();
  16.     self::$buffers[$prevLevel] = ob_get_contents();
  17.     // Устанавливаем новый буфер для перехвата.
  18.     if ($handler !== null) ob_start($handler); else ob_start();
  19.     // Запоминаем текущий уровень объекта.
  20.     $this->level = ob_get_level();
  21.   }
  22.   // Завершает перехват выходного потока.
  23.   public function __destruct() {
  24.     if ($this->flushed) return;
  25.     ob_end_clean();
  26.     unset(self::$buffers[$this->level]);
  27.   }
  28.   // Отправить буфер в браузер.
  29.   public function flush() {
  30.     if ($this->flushed) return;
  31.     ob_end_flush();
  32.     unset(self::$buffers[$this->level]);
  33.   }
  34.   // Возвращает данные в буфере.
  35.   public function __toString() {
  36.     if ($this->flushed) false;  
  37.     // Если текущий объект не является активным, то возвращается
  38.     // текст из внутреннего хранилища, а иначе - результат работы
  39.     // ob_get_contents().
  40.     if (ob_get_level() == $this->level)
  41.       return ob_get_contents();
  42.     else
  43.       return self::$buffers[$this->level];
  44.   }
  45. }
  46. ?>

использование:
PHP:
скопировать код в буфер обмена
  1. $buf = new buffering
  2. echo "Перехватываем выходной поток" //этот текст печатается в буфер;
  3. echo $buf->__toString(); //а теперь выводим содержимое буфера в браузер ну или что вам с ним нужно там делать.
  4.  

(Добавление)
вот пример буфера:
PHP:
скопировать код в буфер обмена
  1. <?PHP ## Автоматизация вызова ob_end_clean().
  2. // Упрощает перехват выходного потока в скриптах.
  3. // Гарантировано вызывает ob_end_clean() при выходе объекта
  4. // класса за текущую область видимости.
  5. class buffering {
  6.   // Содержимое буферов разных уровней.
  7.   private static $buffers = array();
  8.   // Уровень вложенности текущего объекта.
  9.   private $level;
  10.   // Буфер уже был уничтожен (например, выведен в браузер).
  11.   private $flushed;
  12.   // Запускает новый буфер перехвата выходного потока.
  13.   public function __construct($handler=null) {
  14.     // Вначале запоминаем предыдущее содержимое буфера.
  15.     $prevLevel = ob_get_level();
  16.     self::$buffers[$prevLevel] = ob_get_contents();
  17.     // Устанавливаем новый буфер для перехвата.
  18.     if ($handler !== null) ob_start($handler); else ob_start();
  19.     // Запоминаем текущий уровень объекта.
  20.     $this->level = ob_get_level();
  21.   }
  22.   // Завершает перехват выходного потока.
  23.   public function __destruct() {
  24.     if ($this->flushed) return;
  25.     ob_end_clean();
  26.     unset(self::$buffers[$this->level]);
  27.   }
  28.   // Отправить буфер в браузер.
  29.   public function flush() {
  30.     if ($this->flushed) return;
  31.     ob_end_flush();
  32.     unset(self::$buffers[$this->level]);
  33.   }
  34.   // Возвращает данные в буфере.
  35.   public function __toString() {
  36.     if ($this->flushed) false;  
  37.     // Если текущий объект не является активным, то возвращается
  38.     // текст из внутреннего хранилища, а иначе - результат работы
  39.     // ob_get_contents().
  40.     if (ob_get_level() == $this->level)
  41.       return ob_get_contents();
  42.     else
  43.       return self::$buffers[$this->level];
  44.   }
  45. }
  46. ?>

использование:
PHP:
скопировать код в буфер обмена
  1. $buf = new buffering
  2. echo "Перехватываем выходной поток" //этот текст печатается в буфер;
  3. echo $buf->__toString(); //а теперь выводим содержимое буфера в браузер ну или что вам с ним нужно там делать.
  4.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB