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

Форум PHP

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

 

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

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

тема: Не работает скрипт

Сообщения:  [1-3] 

 
 автор: АндрейПро   (23.05.2013 в 17:04)   письмо автору
 
   для: DangerBay   (23.05.2013 в 15:53)
 

Уважаемый DangerBay!!!
Спасибо, помогло.
Не знал, что можно скрипт выводить без оформления html тегами.
Сколько учился, прочел книг, нигде об этом ни слова не сказано.

  Ответить  
 
 автор: DangerBay   (23.05.2013 в 15:53)   письмо автору
 
   для: АндрейПро   (23.05.2013 в 15:13)
 

До любой отправки хэдера на экран не должно выводится никаких данных.
А у вас это происходит. Типичная ошибка.
Решение: найти место где происходит вывод. У вас это до тэга <?php могут выводится переносы строк, а не должно быть ничего. Также нужно вообще удалить закрывающийся тэг ?> во избежания последующих ошибок, потому что после могут быть пробелы или переносы, чего быть не должно.
Тогда всё заработает.
Никаких html-тэгов и прочего быть не должно. Это картинка.
Файлы скрипта должны быть сохранены в кодировке без BOM.
Хотите вывести картинку на html-странице - используйте скрипт так:
<img src="img.php" />

  Ответить  
 
 автор: АндрейПро   (23.05.2013 в 15:13)   письмо автору
 
 

Сам скрипт взят из книги Максима Кузнецова и Игоря Симдянова "Объектно-Ориентированное Программирование" страница 60-61 Глава 2.11
вот его содержимое:
<?php                           
                                                      
                              
// Подключаем объявление класса
                              
require_once("class/class.point.php");
                            
                              
// Массив объектов point
                               
$arr = array(point::get_point(11),
                               
point::get_point(22),
                               
point::get_point(30),
                               
point::get_point(45));

                              
// Определяем минимальное и максимальное 
                              // значения по оси абсцисс (X) и ординат (Y)
                              
$x_min $x_max $arr[0]->get_x();
                              
$y_min $y_max $arr[0]->get_y();
                              for(
$i 0$i count($arr); $i++)
                              {
                                if(
$x_min $arr[$i]->get_x()) $x_min $arr[$i]->get_x();
                                if(
$x_max $arr[$i]->get_x()) $x_max $arr[$i]->get_x();
                                if(
$y_min $arr[$i]->get_y()) $y_min $arr[$i]->get_y();
                                if(
$y_max $arr[$i]->get_y()) $y_max $arr[$i]->get_y();
                              }
                              
                              
// Размер выводимого изображения
                              
$height 100// высота
                              
$width  100// ширина
                            
                              // Создаем полноцветное изображение
                              
$img imagecreatetruecolor($width$width);
                              if (!
$img) exit("Ошибка создания изображения");
                              
                              
// Определяем черный цвет
                              
$black imagecolorallocate($img000);
                                
                              
// Определяем белый цвет    
                              
$white imagecolorallocate($img255255255);
                              
                              
// Заливаем белым цветом фон изображения
                              
imagefill($img00$white);
                              
                              
// Рисуем ломанную
                              
for($i 0$i count($arr) - 1$i++)
                              {
                                
$x1 = ($arr[$i]->get_x() - $x_min)*$width/($x_max $x_min);
                                
$y1 = ($y_max $arr[$i]->get_y())*$height/($y_max $y_min);
                                
$x2 = ($arr[$i 1]->get_x() - $x_min)*$width/($x_max $x_min);
                                
$y2 = ($y_max $arr[$i 1]->get_y())*$height/($y_max $y_min);
                                
imageline($img$x1$y1$x2$y2$black);
                              }
                              
                              
// Выводим изображение в окно браузера
                              
header("Content-type: " .image_type_to_mime_type(IMAGETYPE_PNG));
                              
imagepng($img);
                              
                            
?>


вот содержимое файла класса point:


<?php

  
// Выставляем уровень обработки ошибок 
  
error_reporting(E_ALL & ~E_NOTICE);
  
  class 
point
  
{
    
// Открытый интерфейс класса
    
public function get_point($X$Y)
    {
      
$obj = new point();
      
$obj->set_point($X$Y);
      return 
$obj;
    }
    public function 
get_X()
    {
      return 
$this->X;
    }
    public function 
get_Y()
    {
      return 
$this->Y;
    }

    
// Закрытые члены и методы класса
    
private $X;
    private 
$Y;
    private function 
set_point($X$Y)
    {
      
$this->$X;
      
$this->$Y;
    }
  }
?>


Описание проблемы:
выдается ошибка:

Warning: Cannot modify header information - headers already sent by (output started at /home/p/prohorow/public_html/index2.php:10) in /home/p/prohorow/public_html/index2.php on line 63

перевел как:
Предупреждение: Не удается изменить информацию в заголовке - заголовки уже прислал (выход начался в / home/p/prohorow/public_html/index2.php: 10) в / home/p/prohorow/public_html/index2.php на линии 63

Файл класса закачен в корневую директорию, строка 63 начинается в index2.php начинается с встроенной функции использующую библиотеку GDLib для построения ломанной линии:

header("Content-type: " .image_type_to_mime_type(IMAGETYPE_PNG));


координаты узлов которой хранятся в массиве объектов который описан в строках 55-59.
Не могу понять где я ошибся, проверил код, все полностью совпадает с оригиналом в книге.

На одном из форумов мне ответили следующие:

Принцип работы веб-сервера не позволяет выводить заголовки дважды, если веб сервер получает html информацию то далее использовать функцию header(); использовать нет возможности, избежать этого можно используя функцию ob_start() , для примера внесли изменения в указанный скрипт, проверьте теперь вывод.
вот полное содержимое файла:
<?php ob_start() ?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ без названия</title>
</head>

<body>

<?php
                             
// Выставляем уровень обработки ошибок 
                              
error_reporting(E_ALL & ~E_NOTICE);
                                                       
                              
// Подключаем объявление класса
                              
require_once("class.point.php");
                            
                              
// Массив объектов point
                               
$arr = array(point::get_point(11),
                               
point::get_point(22),
                               
point::get_point(30),
                               
point::get_point(45));

                              
// Определяем минимальное и максимальное 
                              // значения по оси абсцисс (X) и ординат (Y)
                              
$x_min $x_max $arr[0]->get_x();
                              
$y_min $y_max $arr[0]->get_y();
                              for(
$i 0$i count($arr); $i++)
                              {
                                if(
$x_min $arr[$i]->get_x()) $x_min $arr[$i]->get_x();
                                if(
$x_max $arr[$i]->get_x()) $x_max $arr[$i]->get_x();
                                if(
$y_min $arr[$i]->get_y()) $y_min $arr[$i]->get_y();
                                if(
$y_max $arr[$i]->get_y()) $y_max $arr[$i]->get_y();
                              }
                              
                              
// Размер выводимого изображения
                              
$height 100// высота
                              
$width  100// ширина
                            
                              // Создаем полноцветное изображение
                              
$img imagecreatetruecolor($width$width);
                              if (!
$img) exit("Ошибка создания изображения");
                              
                              
// Определяем черный цвет
                              
$black imagecolorallocate($img000);
                                
                              
// Определяем белый цвет    
                              
$white imagecolorallocate($img255255255);
                              
                              
// Заливаем белым цветом фон изображения
                              
imagefill($img00$white);
                              
                              
// Рисуем ломанную
                              
for($i 0$i count($arr) - 1$i++)
                              {
                                
$x1 = ($arr[$i]->get_x() - $x_min)*$width/($x_max $x_min);
                                
$y1 = ($y_max $arr[$i]->get_y())*$height/($y_max $y_min);
                                
$x2 = ($arr[$i 1]->get_x() - $x_min)*$width/($x_max $x_min);
                                
$y2 = ($y_max $arr[$i 1]->get_y())*$height/($y_max $y_min);
                                
imageline($img$x1$y1$x2$y2$black);
                              }
                              
                              
// Выводим изображение в окно браузера
                              
header("Content-type: " .image_type_to_mime_type(IMAGETYPE_PNG));
                              
imagepng($img);
                              
                            
?>

</body>

</html>
<?php ob_end_flush();?>


разместил все это на живом хостинге теперь ругается так:

"Изображение http://****/index.php не может быть показано, так как содержит ошибки"

приехали, я в ступоре помогите кто может.

На локальном сервере денвер:

Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.2.12 Server at localhost Port 80

ошибка та же.

  Ответить  

Сообщения:  [1-3] 

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

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