Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Программирование на PHP

  Все выпуски  

RusFAQ.ru: Программирование на PHP


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / PHP

Выпуск № 649
от 01.05.2007, 13:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 435, Экспертов: 71
В номере:Вопросов: 4, Ответов: 15


Вопрос № 84245: Уважаемый эксперт я изучаю PHP по самоучителю и у меня не получается следующее: в учебнике неписано, что следующий скрипт выводит картинку в браузер <? \line7 $im2= imageCreateFromJpeg("button.jpg"); \line8 He...
Вопрос № 84247: Здравствуйте!!! Помогите, мне нада проинклудить файл не находящийся в дирекории с индексов.пхп даже не на одном сервере вот нпример если индекс лежит например на http://site/index.php а файл который нада проинклудить лежит в http://vashedrygoisa...
Вопрос № 84272: Здравствуйте, уважаемые эксперты!!! Я наконецто создал сайт путем долгих мучений, ну это не важно. Так вот, разместил его на Hut2.ru. соединение с базой данных есть, все работает прекрасно, и, главно, быстро, еще бы, не одной картинки, ну да ...
Вопрос № 84287: Здравствуйте!!! Подскажите, как правильно копировать файлы из формы на сервер...

Вопрос № 84.245
Уважаемый эксперт я изучаю PHP по самоучителю и у меня не получается следующее:

в учебнике неписано, что следующий скрипт выводит картинку в браузер

<? \line7
$im2= imageCreateFromJpeg("button.jpg"); \line8
Header("Content-type: image/jpeg"); \line9
ImageJpeg($im2); \line10
?> \line11

У меня в IE 6 и Opera 9.0 выводится:

Warning: Cannot modify header information - headers already sent by (output started at C:webhomelocalhostwww est.php:7) in C:webhomelocalhostwww est.php on line 9
"содержатие картинки в текстовом виде"

Если закомментировать Line 9 выводится только:

"содержатие картинки в текстовом виде"
Apache 2.2.3 + PHP 5.2.1 for Windows
Отправлен: 26.04.2007, 06:14
Вопрос задал: Typer (статус: Посетитель)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Mailusr
Здравствуйте, Typer!
Попробуйте поменять line9 и line8 местами, действительно header (заголовок) должно быть первым перед выводом страницы - тогда все заработает.
Это однозначно ничего не изменит.
(Ерёмин А.)
Ответ отправил: Mailusr (статус: 2-ой класс)
Ответ отправлен: 26.04.2007, 06:35

Отвечает: Шахгусейнов Азиз
Здравствуйте, Typer!
функция Header() должны выводиться прежде чем что либо выведется.
т.е. скорее всего Вы до \line9 вто-то написали.что-то типа <html>
---------
Среди людей есть такие, которые говорят: "Мы уверовали в Бога и в Последний день". Однако они суть неверующие.
Ответ отправил: Шахгусейнов Азиз (статус: 3-ий класс)
Ответ отправлен: 26.04.2007, 07:56

Отвечает: Адиятуллин Артём Халитович
Здравствуйте, Typer!
Почитайте про эту ошибку тут: http://phpfaq.ru/headers
Ответ отправил: Адиятуллин Артём Халитович (статус: Студент)
Ответ отправлен: 26.04.2007, 12:46
Оценка за ответ: 4

Отвечает: Устинов С.Е.
Здравствуйте, Typer!

Вы, видимо, пишете данный код внутри самой страницы, где хотите увидеть картинку. Это не верно. Для правильной работы данного кода Вам необходимо создать ОТДЕЛЬНЫЙ файл (назову его image.php), в который нужно внести код:

<?php \line7
$im2= imageCreateFromJpeg("button.jpg"); \line8
Header("Content-type: image/jpeg"); \line9
ImageJpeg($im2); \line10
ImageDestroy($im2);
?> \line11

БОЛЬШЕ НИЧЕГО В ЭТОМ ФАЙЛЕ БЫТЬ НЕ ДОЛЖНО!

А в файле, в котором нужно вывести эту картинку пишете просто
<img src='image.php'>

Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов С.Е. (статус: Практикант)
Ответ отправлен: 26.04.2007, 13:02
Оценка за ответ: 5

Отвечает: Egor
Здравствуйте, Typer!
Разберу ваши ошибки.
1 По стандарту заголовки должны выводиться ДО вывода любого другого текста. Если вы хоть 1 пробел вывели то уже поздняк метаться - заголовки не пойдут. У вас же строка header() идет в 9 строке, а до нее идет очевидно какой то текст, который вы кстати не привели здесь ( а зря). Естественно, что команда header() не срабатывает.
Надо так:
<?php // это должно идти в самом начале файла без пробелов
header(...); //выводим заголовок, означающий что далее пойдет картинка в формате jpeg
$im2= imageCreateFromJpeg("button.jpg");
ImageJpeg($im2);
?>
Оьратите внимание, что перед <? и после ?> не должно идти ни 1 символа.

2 Как я понял вы пытаетесь вывести в 1 файле и картинку, и какой-то текст. Естественно, это тоже недопустимо.
В HTML текст и картинки передаются в отд. файлах.
Надо сделать так:
-----1й файл index.html-----
<html>..всякая муть типа head тп
<body>
Текст
<img src="picture.php">
Еще текст
</body>
</html>
----2й файл picture.php-----
<?php // это должно идти в самом начале файла без пробелов
header(...); //выводим заголовок, означающий что далее пойдет картинка в формате jpeg
$im2= imageCreateFromJpeg("button.jpg");
ImageJpeg($im2);
?>
----------------------------------
Надеюсь, вы поняли свою ошибку. Если нет - поясню. 1 скрипт может выдать что-то одно - либо ТОЛЬКО HTML, либо только картинку. Хотите и то и другое - делайте 2 скрипта.
Если что еще - обращайтесь всегда ответим.

Советую почитать:
про HTML, PHP и прочее
http://www.intuit.ru/department/internet/htmlintro/ - оч. хорошая ссылка.

про header()
http://ru2.php.net/manual/ru/function.header.php (англ.)

про протокол HTTP:

http://www.intuit.ru/department/internet/cgi/1/2.html
http://www.winsov.ru/net059.php
http://ru.wikipedia.org/wiki/HTTP
Ответ отправил: Egor (статус: 3-ий класс)
Ответ отправлен: 26.04.2007, 13:05
Оценка за ответ: 5

Отвечает: Молодкин Евгений
Здравствуйте, Typer!
Уже много экспертов написали, что ошибка возможна из-за вывода чего-либо до отправки header(). Не буду повторяться. Подскажу ещё одну возможную причину: при сохранении файла в кодировке UTF-8 частенько первым записывается символ BOM (Byte Order Mark), который все портит. Обычным редактором его не увидеть, т.е. даже если у Вас перед <?php ни одного пробела и дальше сразу идет отправка header(), будет ошибка. Как варианты решения проблемы: сохранять файл в другой кодировке или удалять BOM с помощью HEX-редактора.
Удачи!
Ответ отправил: Молодкин Евгений (статус: 2-ой класс)
Ответ отправлен: 27.04.2007, 04:56
Оценка за ответ: 3


Вопрос № 84.247
Здравствуйте!!! Помогите, мне нада проинклудить файл не находящийся
в дирекории с индексов.пхп даже не на одном сервере вот нпример если индекс лежит например на http://site/index.php а файл который нада проинклудить лежит в http://vashedrygoisait/file.php
как его возможно???
Отправлен: 26.04.2007, 06:32
Вопрос задал: Леонтьев Александр Евгеньевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mailusr
Здравствуйте, Леонтьев Александр Евгеньевич!
попробуйте include "http://vashedrygoisait/file.php", но в таком случае, ваш php файл добавится не в качестве исходного, а как результат - html страничка, т.е. вы не сможете получить какие-либо переменные из подключаемого файла, при условии, что на vashedrygoisait работает php
Ответ отправил: Mailusr (статус: 2-ой класс)
Ответ отправлен: 26.04.2007, 06:46
Оценка за ответ: 5
Комментарий оценки:
Огромное спосибо!

Отвечает: Шахгусейнов Азиз
Здравствуйте, Леонтьев Александр Евгеньевич!
Забудьте! Вы получите то что обычно видите на экране...т.е. обычную html страницу
---------
Среди людей есть такие, которые говорят: "Мы уверовали в Бога и в Последний день". Однако они суть неверующие.
Ответ отправил: Шахгусейнов Азиз (статус: 3-ий класс)
Ответ отправлен: 26.04.2007, 08:02

Отвечает: Fitcher
Здравствуйте, Леонтьев Александр Евгеньевич!

Вот вам пример как надо это описать
include("http://vashedrygoisait/file.php");

с уважением, удачи.
---------
Будущее - это нечто, к чему каждый приближается со скоростью шестьдесят минут в час, желает он того или нет.
Ответ отправил: Fitcher (статус: 5-ый класс)
Ответ отправлен: 26.04.2007, 19:57


Вопрос № 84.272
Здравствуйте, уважаемые эксперты!!!
Я наконецто создал сайт путем долгих мучений, ну это не важно.
Так вот, разместил его на Hut2.ru. соединение с базой данных есть, все работает прекрасно, и, главно, быстро, еще бы, не одной картинки, ну да ладно, дело не в этом. А дело в том, что у меня есть страничка, которая вносит новые поля в базу данных, выбирая их из текстового файла. В текстовом файле SQL запрос типа
INTO `torg` ( `npp` , `pole1` , `pole2` , `opis` , `lejitdo` , `tel` ) VALUES ('', 'Центр', '74000', 'Продается бутик в центре со вем оборудованием', '0000-00-00', '24-12-47');
Insert у меня прописан в РНР коде. На локальном компе, где я делал сайт, все работает прекрасно!!!
Так вот, начинаю загружать, выходит куча ошибок, посмотрите в приложении, пробовал просто качать файл на сервер, ниче не помогает. Как я понял, файл не копируется на сервер. Где ошибка??? в приложеннии привожу ошибки сервера и мой код. $lf и $pwd беру с предыдущей страницы загрузки. Заранее спасибо

Приложение:

Отправлен: 26.04.2007, 09:16
Вопрос задал: BigHard (статус: Студент)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Шахгусейнов Азиз
Здравствуйте, BigHard!
Кажись ошибка выходит из-за того что Вы переменной дали имя $lf
переименуйте файл. должно помочь
---------
Среди людей есть такие, которые говорят: "Мы уверовали в Бога и в Последний день". Однако они суть неверующие.
Ответ отправил: Шахгусейнов Азиз (статус: 3-ий класс)
Ответ отправлен: 26.04.2007, 09:30
Оценка за ответ: 1
Комментарий оценки:
все прекрасно работает и с такой переменой!!! неправильно!

Отвечает: Алексей Смуриков
Здравствуйте, BigHard!
Для справки:
1. Правильно принимать файл так (перемещая его себе на сайт из временного места):
if(!file_exists($_FILES['userfile']['name']) && (move_uploaded_file($_FILES['userfile']['tmp_name'],$_FILES['userfile']['name']) || $_FILES['userfile']['name']!='')) ;
userfile - в данном случае имя в форме....
2. Точно не помню какая версия MySQL на бесплатных хостингах agava, поэтому просто скажу что не мешало бы это узнать и посмотреть особенности синтаксиса SQL запросов (может оказаться что ' необходимо, а может что наоборот)
3. Так же не мешало бы посмотреть login.php и проверить его на ошибки, $if - однозначно лучше имя сменить...


---------
Из того, что я утратил больше всего мне жаль разум.....
Ответ отправил: Алексей Смуриков (статус: Практикант)
Ответ отправлен: 26.04.2007, 10:06
Оценка за ответ: 5
Комментарий оценки:
спасибо, уже разобрался, неправильно создал форму и вообще. Кстати, у меня не if а lf

Отвечает: Mailusr
Здравствуйте, BigHard!
Так как на сервере не существует такого пути - c:avto.txt то соответственно загрузка происходить не будет. Файл загружать на сервер нужно через метод PUT, а fstream функции тут не помогут.
Ответ отправил: Mailusr (статус: 2-ой класс)
Ответ отправлен: 26.04.2007, 10:11
Оценка за ответ: 2
Комментарий оценки:
какой ответ, такая и оценка!! как решить проблему???


Вопрос № 84.287
Здравствуйте!!!
Подскажите, как правильно копировать файлы из формы на сервер
Отправлен: 26.04.2007, 10:36
Вопрос задал: BigHard (статус: Студент)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Алексей Смуриков
Здравствуйте, BigHard!
Повторюсь, отвечая на предыдущий ваш вопрос:
if(!file_exists("upload/".$_FILES['userfile']['name']) && (move_uploaded_file($_FILES['userfile']['tmp_name'],"upload/".$_FILES['userfile']['name']) || $_FILES['userfile']['name']!='')) ;

Разбор:
1. upload - папка на сервере (на сайте) куда перемещаем файл относительно текущей директории...
2. $_FILES['userfile']['name'] - исходное имя файла переданного посредством
3. $_FILES['userfile']['tmp_name'] - путь к закатанному файлу в временной директории переданного посредством
---------
Из того, что я утратил больше всего мне жаль разум.....
Ответ отправил: Алексей Смуриков (статус: Практикант)
Ответ отправлен: 26.04.2007, 10:48
Оценка за ответ: 4
Комментарий оценки:
что - то в вашем ответе одни квадратики, ниче не понятно, но смысл правильный

Отвечает: Шабалихин Максим Геннадьевич
Здравствуйте, BigHard!
Форма для загрузки файлов

<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Отправить этот файл: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

В приведенном выше примере "_URL_" необходимо заменить ссылкой на PHP-скрипт. Скрытое поле MAX_FILE_SIZE(значение необходимо указывать в байтах) должно предшествовать полю для выбора файла, и его значение является максимально допустимым размером принимаемого файла. Также следует убедиться, что в атрибутах формы вы указали enctype="multipart/form-data", в противном случае загрузка файлов на сервер выполняться не будет.
Переменные, определенные для загруженных файлов, зависят от версии PHP и текущей конфигурации и находяться в массиве $_FILES
$_FILES['userfile']['name']
Оригинальное имя файла на компьютере клиента.

$_FILES['userfile']['type']
Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: "image/gif".

$_FILES['userfile']['size']
Размер в байтах принятого файла.

$_FILES['userfile']['tmp_name']
Временное имя, с которым принятый файл был сохранен на сервере.

$_FILES['userfile']['error']
Код ошибки, которая может возникнуть при загрузке файла
По умолчанию принятые файлы сохраняются на сервере в стандартной временной папке до тех пор, пока не будет задана другая директория при помощи директивы upload_tmp_dir конфигурационного файла php.ini. Директорию сервера по умолчанию можно сменить, установив переменную TMPDIR для окружения, в котором выполняется PHP. Установка переменной TMPDIR при помощи функции putenv() внутри PHP-скрипта работать не будет. Эта переменная окружения также может использоваться для того, чтобы удостовериться, что другие операции также работают с принятыми файлами.

Следующий пример принимает и обрабатывает загруженный при помощи формы файл.

<?php
// В PHP 4.1.0 и более ранних версиях следует использовать $HTTP_POST_FILES
// вместо $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
print "File is valid, and was successfully uploaded. ";
print "Here's some more debugging info: ";
print_r($_FILES);
} else {
print "Possible file upload attack! Here's some debugging info: ";
print "Possible file upload attack! Дополнительная отладочная информация: ";
print_r($_FILES);
}
print "</pre>";

?>

Ответ отправил: Шабалихин Максим Геннадьевич (статус: 1-ый класс)
Ответ отправлен: 26.04.2007, 10:56
Оценка за ответ: 5
Комментарий оценки:
вот это развернутый ответ!! Спасибо

Отвечает: Mailusr
Здравствуйте, BigHard!
Смотрите приложение - форма upload.htm, прием на сервере - upload.php

Приложение:

Ответ отправил: Mailusr (статус: 2-ой класс)
Ответ отправлен: 26.04.2007, 10:56
Оценка за ответ: 5
Комментарий оценки:
все сделал по вашему способу, получилось, спасибо!!!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.51 (beta) от 27.04.2007
Яндекс Rambler's Top100

В избранное