Консультация № 58672
12.10.2006, 14:30
0.00 руб.
0 3 3
Уважаемые Эксперты!

Я делаю скрипт, который из формы заружает файл с изображением и записывает его в базу данных.
Другой скрипт читает файл из базы и выводит картинку.
В базе данных MySQL создана соотв. таблица, в ней поле для картинок, тип поля - MEDIUMBLOB/

Почему-то скрипт не работает. Такое впечатление, что файл записывается как-то криво.

Код прилагаю, буду признателен за помощь.


Приложение:
Форма для загрузки:<form action="upload_photo.php" method=post enctype=multipart/form-data target=data><input type=file name="foto1">input type=submit name="add" value="Закачать" class="but"></form> Вот скрипт "upload_photo.php", который записывает файл в базу:$failed=1; // переменная = 1 в случае ошибки, 0 - в случае удачной записи$fn[‘foto1‘]=""; // переменная, в которую записывается картинкаif($foto1&&file_exists($foto1)) { // если файл есть, то он считывается // в переменную $f=fopen($foto1,"r"); $fn[‘foto1‘]=fread($f, 200000); $failed=0;}elseif(@$foto1&&!@file_exists($foto1)) { // если файла нет - ошибка $failed=1; $what=$photo1;}if ($failed==0) { echo "Загрузка успешно завершена!"; ..... // опускаю кусок, где запись в базу данных}else echo "Файл не найден ";Вот кусок скрипта "show_foto.php", который должен выводить фото:// опускаю кусок, где идет чтение из базы данных // в переменную $dat["foto1"]$f=fopen("images/temp/foto1.jpg","w+");flock($f,LOCK_EX);fwrite($f, $dat["foto1"]);flock($f,LOCK_UN);fclose($f);echo "<img src=images/temp/foto1.jpg>";

Обсуждение

Неизвестный
12.10.2006, 14:55
общий
это ответ
Здравствуйте, chiefff!
Первое, что приходит на ум при просмотре представленного кода - это режим открытия файла в скриптах upload_photo.php и show_foto.php. Для нормальной работы скриптов рекомендуется указывать режим бинарного чтения/записи, т.е. в скриптах напишите так:

$f=fopen($foto1,"rb");

$f=fopen("images/temp/foto1.jpg","w+b");
Неизвестный
12.10.2006, 15:15
общий
это ответ
Здравствуйте, chiefff!
// опускаю кусок, где запись в базу данных
.................................................
// опускаю кусок, где идет чтение из базы данных

Зря. Здесь самое интересное. Предполагаю, что Вы воспользовались функцией addslalses для записи в базу и stripslashes для чтения, а на самом деле слэш - служебный символ SQL‘я и, соответственно, вызывать stripslashes не надо
Неизвестный
13.10.2006, 15:07
общий
это ответ
Здравствуйте, chiefff!

советую перед записью в базу воспользоватся функцией
$file=bin2hex($file) - который перегонит бинарный файл в hex вид,

а затем при считывании сделать обратное преобразование

$file=pack("H*",$file);
Форма ответа