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
Форумы портала PHP.SU :: Версия для печати :: Создание html копии интерпретируемого php файла.
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Создание html копии интерпретируемого php файла.

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

1. Конструктор - 17 Августа, 2011 - 12:49:12 - перейти к сообщению
Дано:
1. PHP-файл на странице сайта.
2. При открытии этого файла он соответсвенно дает браузеру нужный Html.
3. Нужно чтобы этот PHP-файл одновременно генерировал на сервере и сохранял копию этого Html файла (который мы видим как исходник страницы у себя в браузере).

Сразу сделать этот html не получается, так как php-файл будет цеплять разные другие для собственной сборки.
2. LIME - 17 Августа, 2011 - 12:59:31 - перейти к сообщению
3. Конструктор - 17 Августа, 2011 - 13:34:04 - перейти к сообщению

Прочитал статью, может это то что надо, но пример мне кажется чуть перегрузили не нужным материалом..
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function callback($buffer) {
  4.  
  5. // заменить все apples на oranges
  6. return (ereg_replace("apples", "oranges", $buffer));
  7.  
  8. }
  9.  
  10. ob_start("callback");
  11.  
  12. ?>
  13. <html>
  14. <body>
  15. <p>It's like comparing apples to oranges.
  16. </body>
  17. </html>
  18.  
  19. <?PHP
  20.  
  21.  
  22. ?>

Например зачем в нем еще и регулярные выражения?
Еще не понял строчку

Как ее понять? Получается там функции передают имя другой функции как стпроку?
И не совсем понял как работает переменная $buffer. Ведь ей ничего не присваивают, а делают с ней преобразования..

И не совсем понял главного как работает вызов функции
?
тоесть в нем мы включаем буфер вывода?
А зачем передавать ему значение функции?
Ведь в странице этих функций может быть сколько угодно и не известно как они даже називаются...
4. LIME - 17 Августа, 2011 - 13:59:52 - перейти к сообщению
а не перечитать ли вам ее внимательнее?
все же есть в описании
Конструктор пишет:
Получается там функции передают имя другой функции как стпроку?
Цитата:
Может быть специфицирована необязательная функция output_callback. Эта функция принимает строку как параметр и должна возвращать строку. Функция будет вызвана при вызове ob_end_flush(), или если буфер выводится в браузер в конце запроса. Когда вызывается output_callback, она примет содержимое буфера вывода как параметр и по идее должна возвратить новый буфер вывода как результат, который будет направлен в браузер.

Конструктор пишет:
Например зачем в нем еще и регулярные выражения?

с их помощью обрабатывается буфер вывода (изменяется)

в одном вы правы - вам это ненадо
вам главное в начале стартануть буферизацию
в конце записать буфер в файл и отправить в вывод
(Добавление)
Конструктор пишет:
И не совсем понял как работает переменная $buffer. Ведь ей ничего не присваивают, а делают с ней преобразования..
в нее помещается буфер для дальнейшей обработки
5. Конструктор - 17 Августа, 2011 - 14:09:17 - перейти к сообщению
а output_callback и callback это ведь одно и тоже?
просто в коде callback,
а в описании пишут про output_callback. Какую именно нужно использовать?
Или можно даже по-своему обозвать?

Цитата:
Эта функция принимает строку как параметр и должна возвращать строку.

Не свовсем очевидно что значит - возвращает строку.. Я так понял берется пустая переменная, инициализируется, и в конце скрипта этой строке присваевается все что в буфере?

А как быть в моем случае?
У меня может быть так:
PHP:
скопировать код в буфер обмена
  1. <html />
  2. <?PHP .... ?>
  3. <html />
  4. <?PHP .... ?>
  5. <html />
  6. <?PHP .... ?>
  7. <html />
  8. <?PHP .... ?>
  9. <?PHP .... ?>
  10. <?PHP .... ?>

как мне присвоить значение всей страници сразу в переменную $buffer?
вызывать буфер после каждого пхп?
6. LIME - 17 Августа, 2011 - 14:22:10 - перейти к сообщению
void ob_start ([string output_callback])
знакомая строчка?
научитесь читать краткое описание
[] означает что параметр необязательный
void значит что не возвращает значений (типа процедура)
вам это не надо
string output_callback преобразует вывод перед отправлением
Цитата:
Эта функция принимает строку как параметр и должна возвращать строку.
теперь надеюсь понятно?
повторю- вам это не надо....просто стартуйте без ф-ции
7. Конструктор - 17 Августа, 2011 - 14:30:32 - перейти к сообщению
LIME пишет:
теперь надеюсь понятно?
да ) некоторые вещи стали понятне..
тоесть я пишу так-
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. ob_start();                        /* Стартуем буфер вывода */
  5. начало страницы...
  6. ....
  7. конец страницы
  8. $buffer = ob_get_contents();      /* Копируем буфер вывода в переменную */
  9. ob_end_flush();                         /* Закрываем буфер вывода */
  10.  
  11. $document_root = $_SERVER['DOCUMENT_ROOT'];   /* Записываем все в файл на сервере  */
  12. $fp = fopen($document_root.'/copy_php.html', 'w');    
  13. fwrite($fp, $buffer);
  14. fclose($fp);
  15.  
  16. ?>

таков алгоритм правельный?
8. LIME - 17 Августа, 2011 - 14:33:23 - перейти к сообщению
да
только еще не забудьте в файл писать
9. Конструктор - 17 Августа, 2011 - 17:56:56 - перейти к сообщению
LIME пишет:
да
только еще не забудьте в файл писать


Все теперь работает,
а никто не подскажет как записать файл в поддиректорию?
тоесть просто файл пишет без проблем,
а как еще создать подпапку и записать уже в нее?
$fp = fopen($document_root.'/xxx/copy_php.html', 'w'); не работает
10. DeepVarvar - 17 Августа, 2011 - 18:02:14 - перейти к сообщению
mkdir
11. Конструктор - 17 Августа, 2011 - 18:03:47 - перейти к сообщению
Конструктор пишет:
LIME пишет:
да
только еще не забудьте в файл писать


Все теперь работает,
а никто не подскажет как записать файл в поддиректорию?
тоесть просто файл пишет без проблем,
а как еще создать подпапку и записать уже в нее?
$fp = fopen($document_root.'/xxx/copy_php.html', 'w'); не работает


нашел
mkdir($document_root.'/xxx', 0700);

DeepVarvar спасибо, просто поисковик в данном случае тоже быстро ответил)

 

Powered by ExBB FM 1.0 RC1