Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
Написал скрипт для автоматического создания деректории, загрузки графических файлов не более 1мб на сервер и вставки пути к картинке в базу данных!!
вот кусок формы ято отвечает за загрузку файла
$result = mysql_query("INSERT INTO base (cat,title,meta_d,meta_k,description,text,date,author,mini_img,views) VALUES ('$category','$title','$meta_d','$meta_k','$description','$text','$date','$author','$mini_img','0')");
при попытке загрузить файл, деректория не создается, картинка соотвественно не грузится, а в базу данных вставляется путь вида files/20100625/ (без названия файла)
Подскажите шде тут ошибка?
в одинарный кавычках подстановки значений переменных не происходит. К тому же, зачем вообще переменную брать в кавычки? оно от этого только медленнее работает.
----- PostgreSQL DBA
maroz89
Отправлено: 26 Июня, 2010 - 14:11:53
Новичок
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
Мелкий пишет:
сделайте echo '$path_dir' и удивитесь
сделал... и не удивился папка то создается, но не там где нужно, а в папке "админ", а нужно в папке сайта! я так понял путь задан не правельно
уже не работает! как можно задать так, чтоб не указывать папку home! чтоб при переносе на сервер не менять, ведь корневая папка на севере может назваться по-разному к примеру html и тд...
ну и проблемма осталась в том, что файл в эту папку не грузится и имя файла не прописывается в путь!
$result = mysql_query("INSERT INTO base (cat,title,meta_d,meta_k,description,text,date,author,mini_img,views) VALUES ('$category','$title','$meta_d','$meta_k','$description','$text','$date','$author','$mini_img','0')");
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
maroz89 пишет:
сделал... и не удивился папка то создается, но не там где нужно, а в папке "админ", а нужно в папке сайта! я так понял путь задан не правельно
Серьёзно, создаётся? И при том не (например) /home/phpblog/www/files/$path_dir/ ? Или это не ошибка и вам реально надо работать с директорией долларpath_dir? Тогда извините, думал, это ошибка, и нужна директория по значению этой переменной...
maroz89 пишет:
как можно задать так, чтоб не указывать папку home! чтоб при переносе на сервер не менять, ведь корневая папка на севере может назваться по-разному к примеру html и тд...
работать с локальной ФС, относительно скрипта. Т.е. mkdir("files/"); - создать в этой директории папку files.
Или объявлять абсолютное местоположение корня с помощью константы и обращаться к этой константе.
А по вопросу, куда девалось оригинальное имя файла - а оно вообще пришло? И если пришло, то в каком виде?
Кстати, зачем в строке 4 "&& $_FILES['userfile']['size'] < 1024*1*1024"? Если это первая загрузка за сегодня и файл меньше 1мб, то создать папку, но в любом случае загрузить файл в эту папку (возможно, не созданную)?
И более классическая проблема - права на запись-то есть в директорию?
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
maroz89 пишет:
При попытке загрузить файл, деректория не создается, картинка соотвественно не грузится
Если у вас в PHP-скрипте не создается определенная директория то вероятно у вас нет прав записи в родительскую папку - учтите что PHP-скрипт выполняется не от имени вашего системного пользователя которому скорее всего принадлежит данная папка а от имени www-data - поэтому проверьте чтобы на нее стояли права 777 Также проверьте правильность относительного пути - если на хостинге не установлена опция open_basedir то слеш / в начале пути будет означать абсолютный путь - а не аналогичный виртуальному пути web-пространства
Если вы хотите сделать PHP-скрипт без использования реальный относительный путей и незасимого от реальный абсолютных путей - например по причине использования функции chdir которая меняет рабочую папку внутри исполняемого PHP-скрипта - то можете использовать переменную окружения DOCUMENT_ROOT и далее часть абсолютного пути до вашего PHP-скрипта
Что касается отсутствия самого имени файла при запись в БД - то обязательно экранируйте все переменные при подстановке в SQL-запрос
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
maroz89
Отправлено: 27 Июня, 2010 - 11:59:16
Новичок
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
ну с каталогом разобрался JustUserR спасибо.. DOCUMENT_ROOT помогло
с записью в БД тоже все ясно... ему просто нечего записывать
Осталась одно проблемма - файл не грузится
вот немного переписал код
$result=mysql_query("INSERT INTO base (cat,title,meta_d,meta_k,description,text,date,author,mini_img,views) VALUES ('$category','$title','$meta_d','$meta_k','$description','$text','$date','$author','$mini_img','0')");
Для того что б узнать... не грузится файл или он не перемещается с временной папки...
Ну вот оказалось что не грузится
По поводу прав, ну папку в скрипте создаю с правами 777! работаю на локально компьютере (Денвер)! Где можно изменить права на запись?
JustUserR
Отправлено: 27 Июня, 2010 - 12:43:27
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
maroz89 пишет:
Ну с каталогом разобрался
JustUserR спасибо.. DOCUMENT_ROOT помогло
Пожалуйста! Использование данной переменной окружения особенно полезно тем что всегда показывает реальный абсолютный файловый путь - в отличие от многих других которые могут показывать web-пути или относительные open_basedir пути - и для превращения которых в настоящие абсолютные пути требуется доступ к конфигурационным файлам и просмотр их директив
maroz89 пишет:
Ну вот оказалось что не грузится
В таком случае попробуйте сделать print_r($_FILES) и посмотреть что выдаст данная конструкция - если массив файлов пуст то на самом деле у вас ничего не загружается - причем условие размера файла срабатывает поскольку значение null в проверочном условии трактуется как числовой ноль Попробуйте проверить правильность отправочной формы - а именно обязательная POST-отправка и указания Content-encoding путем аттбирута enctype="multipart/form-data"
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
maroz89
Отправлено: 28 Июня, 2010 - 01:54:38
Новичок
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
JustUserR пишет:
Попробуйте проверить правильность отправочной формы - а именно обязательная POST-отправка и указания Content-encoding путем аттбирута enctype="multipart/form-data"
Да к своему стыду)) пропустил enctype="multipart/form-data"
Дописал, теперь имя файла нормально вводится, все как нужно...
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
maroz89 пишет:
Дописал, теперь имя файла нормально вводится, все как нужно...
Но файл всеравно не создается.. пробовал писать print_r($_FILES), получил такое
После внесения последних изменений стало видно что файл начинает передаваться от браузера к PHP-интерпретатору и как минимум сопутствующие HTTP-заголовки успешно передаются - однако PHP не может или целиком получить файл или сохранить его во временную папку Однако в вашем случае видно что возникла ошибка с номером 2 что соответствует константе UPLOAD_ERR_FORM_SIZE - то есть
Цитата:
Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме
То есть вам следует убрать аттрибут тега input type="file" который ограничивает максимальный размер файла - в силу того что различные браузеры обрабатывают его по разному и использовать его не рекоммендуется Также на всякий случай проверьте максимально допустимый размер закачиваемого файла в php.ini для вашей инстнации PHP-интерпретатора
Если указанные выше действия не помогли окончательно разрегить проблему то имеет смысл посмотреть что реально преедается от браузера к web-серверу - для этих целей можно использовать HTTP-сниффер типа Proxymotron
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
maroz89
Отправлено: 28 Июня, 2010 - 20:04:12
Новичок
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
Такая ситуация... файл успешно перемещается, но не туда куда нужно, а в папку Админ, где лежит обработчик и форма...При этом файл называется $path_dir и у него нет разширения!
Когда убираю кавычки '$path_dir'
Warning: move_uploaded_file(X:/home/phpblog/www/files/20100628) [function.move-uploaded-file]: failed to open stream: Permission denied in X:\home\phpblog\www\admin\new_add.php on line 63
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'X:\tmp\php13E.tmp' to 'X:/home/phpblog/www/files/20100628' in X:\home\phpblog\www\admin\new_add.php on line 63
я так понимаю какиет-то проблеммы с правами... Где эти права на локальном компе править?
файл теперь перемещается в корневую папку сайта, не имеет разширения и получает имя filesЃ00628
Мелкий
Отправлено: 28 Июня, 2010 - 20:29:50
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
maroz89 пишет:
При этом файл называется $path_dir и у него нет разширения!
О чём, в том числе, я и говорю, собственно.
maroz89 пишет:
файл теперь перемещается в корневую папку сайта, не имеет разширения и получает имя filesЃ00628
А вот тут строку надо брать в одинарные кавычки, т.к. сейчас \201 подхватывается как код символа, о чем и подсветка форума предупреждает.
maroz89 пишет:
я так понимаю какиет-то проблеммы с правами... Где эти права на локальном компе править?
Под виндой - честно, не представляю. Но поэкспериментируйте со вторым параметром функции mkdir
----- PostgreSQL DBA
JustUserR
Отправлено: 29 Июня, 2010 - 16:00:20
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
maroz89 пишет:
Я так понимаю какиет-то проблеммы с правами... Где эти права на локальном компе править?
Система прав пользователей и их доступа к файлам в операционных системах NT в принципе похоже на аналогичную в linux - и если вы запускаете ваш сервис не из-под администраторского пользователя то такое вполне может быть - если в проводнике в Свойствх папки по вкладке Вид выключить флажок Использовать простой доступ к файлам - то при запросе аттрибутов любого каталога или файла вы увидете вполне мощный интерфейс для указания того какие пользователи имеют права к каким файлам и даже могут ли они передавать и переназначать права Попробуйте поставить достаточные права пользователю Гость который является неким аналогом пользователя nobody под linux - или же сделайте группу пользователей в которую будет входить владалец папки и пользователи от имени которого запускаются подпроцессы в Apache
Что касается использование слешей по интерпретатор PHP в целях совместимости между пратформами позволяет всегда использовать прямые слеши - поскольку обратные всегда приходится экранировать Также обратите внимание на то что все строковые константы с именем папки должны быть в кодировке Windows-1251 - то есть по сути кодировки имен файлов в ФС windows
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
maroz89
Отправлено: 30 Июня, 2010 - 09:31:10
Новичок
Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2010
Помог: 0 раз(а)
причин этого чуда 2.. оказвается я не един с этой проблеммой
Первая это то, то у меня Винда СП3 и в атрибутах каждой папки стоит Read Only и эту галочку убрать не возможно! тоесть она убирается, а после повторной проверки опять стоит((
Есть мнеие,
Цитата:
абсолютно с этим не связано.
пропиши session.save_path на директорию, где будет храниться временной хлам.
проблема может быть с правами доступа к временной директории, но никак ни с этим параметром.
по второму мнению пробовал прописать абсолютный путь session.save_path = "X:/tmp/"
Не помогло... а вот с галочкой рид онли ... никак не могу победить((
И еще волпрос, как сделать чтоб файл, который теоретически перемещается в папку, имел такое имя и разширение как на копьютере??
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.