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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Warning: Cannot modify header information - headers already sent by
 
 автор: kyzma   (14.11.2007 в 21:46)   письмо автору
 
 

Здравствуйте, написал скрипт, который выводит изображение. Таблицы из которой вывожу изображение типа InnoDB. если отсылаю заголовок на загрузку файла, то выводится ошибка

Warning: Cannot modify header information - headers already sent by (output started at D:\Sites\home\kafedra42.ru\www\sel.php:5

и вместо изображения появляется абракадабра.

если не отсылать заголовок на загрузку файла, то ошибка не выводится и всё равно вместо изображения появляется абракадабра.

   
 
 автор: ddhvvn   (14.11.2007 в 22:04)   письмо автору
 
   для: kyzma   (14.11.2007 в 21:46)
 

Покажите с 1 по 5 строчки Вашего скрипта

   
 
 автор: kyzma   (14.11.2007 в 22:16)   письмо автору
 
   для: kyzma   (14.11.2007 в 21:46)
 


$query = "SELECT id_user, fio, foto FROM user";
    $usr = mysql_query($query);
    header("Content-type: image/*");
    if ($usr)
    {
        echo "<table border=1 cellspacing='5'>";
        echo "<tr>
        <td>"."Номер"."</td>
        <td>"."ФИО"."</td>
        <td>"."Фото"."</td>
        </tr>";
        
        while (list ($id_user, $fio, $foto) = mysql_fetch_row($usr))
        {
            echo "<tr>
            <td>$id_user</td>
            <td>$fio</td>
            <td>$foto</td>
            </tr>";                
                  }
        echo "</table>";
             }
    else exit(mysql_error());

   
 
 автор: Faraon   (15.11.2007 в 09:50)   письмо автору
 
   для: kyzma   (14.11.2007 в 22:16)
 

До передачи заголовков не должно быть вывода в браузер, также перед <?php не должно быть пустых строк или пробелов

   
 
 автор: kyzma   (15.11.2007 в 15:23)   письмо автору
 
   для: Faraon   (15.11.2007 в 09:50)
 

Ставлю

header("Content-type: image/*");
в начале, то вылезает диалоговое окно, предлагающее сохранить файл скрипта (*.php).
Пожалуйста подскажите, как сделать, чтобы изображения просто выводились в броузере.

   
 
 автор: cheops   (15.11.2007 в 16:55)   письмо автору
 
   для: kyzma   (15.11.2007 в 15:23)
 

А зачем вы сообщаете браузеру, что собираетесь выводить изображение
<?php
header
("Content-type: image/*");
?>

а затем выводите текст? Изображение совместно с текстом выводится при помощи HTML-тэга <img>, в атрибуте src которого указывается адрес изображения - этот адрес и должен указывать на скрипт выводящий изображение из базы данных (больше этот скрипт ничего выводить не должен, иначе изображение будет искажено).

   
 
 автор: kyzma   (16.11.2007 в 22:27)   письмо автору
 
   для: cheops   (15.11.2007 в 16:55)
 

а если каждому изображению соответствует несколько текстовых полей, то как быть?Подскажите как для этого скрипта написать скрипт, который должен выводить только изображения

<?php
    session_start
();
    echo 
"Здравствуйте, ".$_SESSION['name']."!<br>";
    require_once(
"mysql_connect.php");
    
$query "SELECT id_user, AES_DECRYPT(fio, 'секретный ключ'), foto FROM user";
    
$usr mysql_query($query);
    if (
$usr)
    {
        echo 
"<table border=1 cellspacing='5'>";
        echo 
"<tr>
        <td>"
."Номер"."</td>
        <td>"
."ФИО"."</td>
        <td>"
."Фото"."</td>
        </tr>"
;
        
        while (list (
$id_user$fio$foto) = mysql_fetch_row($usr))
        {
            echo 
"<tr>
            <td>
$id_user</td>
            <td>
$fio</td>
            <td>
$foto</td>
            </tr>"
;                
        }
        echo 
"</table>";
    }
    else exit(
mysql_error());
?>

   
 
 автор: cheops   (17.11.2007 в 12:34)   письмо автору
 
   для: kyzma   (16.11.2007 в 22:27)
 

<?php
  
...
        while (list (
$id_user$fio$foto) = mysql_fetch_row($usr)) 
        { 
            echo 
"<tr> 
            <td>
$id_user</td> 
            <td>
$fio</td> 
            <td><img src=image.php?id_user=
$id_user></td> 
            </tr>"
;                 
        } 
        echo 
"</table>";
  ...
?>

А в файле image.php выводите изображение для записи с первичным ключом $_GET['id_user'] с выводом заголовка при помощи header().

   
 
 автор: cheops   (15.11.2007 в 15:10)   письмо автору
 
   для: kyzma   (14.11.2007 в 21:46)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.

http://www.softtime.ru/group/id_group=12

   
Rambler's Top100
вверх

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