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

Форум PHP

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

 

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

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

тема: загрузка логотипа.
 
 автор: Василий   (29.12.2011 в 22:38)   письмо автору
 
 

Добрый день!
Нужно получать от клиентов их логотипы.

       <form action='logo.php' method='post' enctype='multipart/form-data'>
      Загрузить логотип<br>
      <input type='file' class='text' name='logo' size='30' />
      <br><br>
      <input type='submit' class='button' value='Загрузить' />
      <input type='hidden' name='task' value='upload' />
      <input type='hidden' name='MAX_FILE_SIZE' value='5000000' />
      </form>


Как должен выглядеть обработчик logo.php?

  Ответить  
 
 автор: cheops   (29.12.2011 в 22:40)   письмо автору
 
   для: Василий   (29.12.2011 в 22:38)
 

Возможно вас заинтересует скрипт по ссылке http://softtime.ru/scripts/upload.php.

  Ответить  
 
 автор: Василий   (29.12.2011 в 22:42)   письмо автору
 
   для: cheops   (29.12.2011 в 22:40)
 

еще как. Спасибо

  Ответить  
 
 автор: Василий   (29.12.2011 в 22:49)   письмо автору
 
   для: Василий   (29.12.2011 в 22:42)
 

файл upload. php
17 строка
 move_uploaded_file($_FILES["filename"]["tmp_name"], "/path/to/file/".$_FILES["filename"]["name"]);

С чем это едят? Что прописатьвместо: filename, tmp_name, path/to/file/".$_FILES["filename"]["name"]);

Лучше приведите, пожайлуста, пример записи

  Ответить  
 
 автор: cheops   (29.12.2011 в 22:55)   письмо автору
 
   для: Василий   (29.12.2011 в 22:49)
 

Вместо "filename" у вас везде будет "logo", "tmp_name" остается без изменений, а "/path/to/file/" - это папка куда вы будете складывать загруженные изображения. Путь не обязательно должен быть абсолютным, можно воспользоваться относительным.

  Ответить  
 
 автор: Василий   (29.12.2011 в 23:02)   письмо автору
 
   для: cheops   (29.12.2011 в 22:55)
 

а "/path/to/file/" - это папка куда вы будете складывать загруженные изображения. Путь не обязательно должен быть абсолютным, можно воспользоваться относительным
эта папка должна на компьютере или на сервере?
могу ли я хранить логотипы в папке logo на сервере? если да, то как прописать к нему путь?

Будет ли верна вот такая запись www.mysite.ru/logo ?

  Ответить  
 
 автор: speedsoft   (29.12.2011 в 23:15)   письмо автору
 
   для: Василий   (29.12.2011 в 23:02)
 

Ну вы же грузите на сервер, значит храниться будет на сервере. www.mysite.ru нельзя, нужен путь в файловой системе

если DOCUMENT_ROOT определен, то можно взять такой путь

$_SERVER['DOCUMENT_ROOT'].'/'.$_FILES["filename"]["name"];


тогда будет в корень сайта кидать, но лучше для всего этого дела сделать папку, например upload и путь указать
$_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"]

  Ответить  
 
 автор: Василий   (29.12.2011 в 23:25)   письмо автору
 
   для: speedsoft   (29.12.2011 в 23:15)
 

создал папку upload
вот так записал.
  move_uploaded_file($_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["logo"]["name"]);

Дает ошибку:
Warning: move_uploaded_file(.../upload/) [function.move-uploaded-file]: failed to open stream: Is a directory in /home./..../upload.php on line 17

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpHUGXAU' to '/home/.....l/upload.php on line 17

поменял
  move_uploaded_file($_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["logo"]["name"]); 

на
  move_uploaded_file($_FILES["logo"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["logo"]["name"]); 

ошибок нет и логотипа нет. папка upload пуста

  Ответить  
 
 автор: cheops   (29.12.2011 в 23:35)   письмо автору
 
   для: Василий   (29.12.2011 в 23:25)
 

Права доступа на папку /upload/ какие? Поставьте 0777.

  Ответить  
 
 автор: Василий   (29.12.2011 в 23:38)   письмо автору
 
   для: cheops   (29.12.2011 в 23:35)
 

права поставил 777
все равно пусто

  Ответить  
 
 автор: cheops   (29.12.2011 в 23:42)   письмо автору
 
   для: Василий   (29.12.2011 в 23:38)
 

Тогда нужно сделать проверки, как советует speedsoft ниже

  Ответить  
 
 автор: speedsoft   (29.12.2011 в 23:36)   письмо автору
 
   для: Василий   (29.12.2011 в 23:25)
 

сделайте
var_dump($_FILES) 


и


echo $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["logo"]["name"];



и покажите что он выдаст

  Ответить  
 
 автор: Василий   (29.12.2011 в 23:43)   письмо автору
 
   для: speedsoft   (29.12.2011 в 23:36)
 

выдало

/home/siten/public_html/upload/

а насчет var_dump($_FILES) не понял куда записать

  Ответить  
 
 автор: cheops   (29.12.2011 в 23:47)   письмо автору
 
   для: Василий   (29.12.2011 в 23:43)
 

Можно после предыдущей записи
var_dump($_FILES);

  Ответить  
 
 автор: Василий   (30.12.2011 в 00:25)   письмо автору
 
   для: cheops   (29.12.2011 в 23:47)
 

/home/siten/public_html/upload/array(1) { ["filename"]=> array(5) { ["name"]=> string(15) "6.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpx6hyK8" ["error"]=> int(0) ["size"]=> int(230180) } }

  Ответить  
 
 автор: speedsoft   (30.12.2011 в 00:45)   письмо автору
 
   для: Василий   (30.12.2011 в 00:25)
 

поидее вот так тогда

move_uploaded_file($_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"]); 

  Ответить  
 
 автор: Василий   (30.12.2011 в 00:51)   письмо автору
 
   для: speedsoft   (30.12.2011 в 00:45)
 

без изменений. папка пустая
если перезагрузить upload.php
то выдает ошибку
Ошибка загрузки файла/home/siten/public_html/upload/array(0) { }

  Ответить  
 
 автор: speedsoft   (30.12.2011 в 01:05)   письмо автору
 
   для: Василий   (30.12.2011 в 00:51)
 

Если права позволяют, и Вы нас не обманываете =))) то должно.

давайте еще раз проверим что нам пришло

echo "temp file: ",$_FILES["filename"]["tmp_name"], "<br>";
echo "new file:  ", $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"];


покажет что сформировалось. может где-то что-то не подставляется.

  Ответить  
 
 автор: Василий   (30.12.2011 в 01:32)   письмо автору
 
   для: speedsoft   (30.12.2011 в 01:05)
 

вот что выводится
/home/siten/public_html/upload/array(1) { ["filename"]=> array(5) { ["name"]=> string(15) "6.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/php2b2Bvc" ["error"]=> int(0) ["size"]=> int(230180) } } temp file: /tmp/php2b2Bvc
new file: /home/siten/public_html/upload/6.jpg


на папке upload есть зеленый крестик. но тем не менее пустая папка

  Ответить  
 
 автор: speedsoft   (30.12.2011 в 03:32)   письмо автору
 
   для: Василий   (30.12.2011 в 01:32)
 

ну вроде все верно. запустите phpinfo и поглядите, случайно парметр safe_mode не стоит в ON ?


чтобы запустить phpinfo сделайте отдельно файл со след.кодом
<?
phpinfo
();
?>

  Ответить  
 
 автор: Василий   (30.12.2011 в 08:46)   письмо автору
 
   для: speedsoft   (30.12.2011 в 03:32)
 

поверил
safe_mode Off Off

  Ответить  
 
 автор: speedsoft   (30.12.2011 в 09:09)   письмо автору
 
   для: Василий   (30.12.2011 в 08:46)
 

выложите архив с файлами, погляжу у себя.

  Ответить  
 
 автор: Василий   (30.12.2011 в 13:55)   письмо автору
 
   для: speedsoft   (30.12.2011 в 09:09)
 

А ТУТ только два файла
example.php
<html>
<head>
  <title>Загрузка файлов на сервер</title>
</head>
<body>
      <h2><p><b> Форма для загрузки файлов </b></p></h2>
      <form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="file" name="filename"><br> 
      <input type="submit" value="Загрузить"><br>
      </form>
</body>
</html>

upload.php
<html>
<head>
  <title>Результат загрузки файла</title>
</head>
<body>
<?php
   
if($_FILES["filename"]["size"] > 1024*3*1024)
   {
     echo (
"Размер файла превышает три мегабайта");
     exit;
   }
   
// Проверяем загружен ли файл
   
if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
   {
     
// Если файл загружен успешно, перемещаем его
     // из временной директории в конечную
  
move_uploaded_file($_FILES["filename"]["tmp_name"], 
$_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"]); 
   } else {
      echo(
"Ошибка загрузки файла");
   }
   
   echo 
$_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["logo"]["name"]; 
   
var_dump($_FILES);
   
   echo 
"temp file: ",$_FILES["filename"]["tmp_name"], "<br>";
echo 
"new file:  "$_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"]; 
?>

<?
phpinfo
();
?> 
</body>
</html>

  Ответить  
 
 автор: Василий   (30.12.2011 в 15:45)   письмо автору
 
   для: Василий   (30.12.2011 в 13:55)
 

Что-то не работает ваш скрипт

  Ответить  
 
 автор: speedsoft   (30.12.2011 в 17:41)   письмо автору
 
   для: Василий   (30.12.2011 в 15:45)
 

То-то и оно что работает. Ваш скопировал 1 в 1 и все загрузилось.

попробуйте move_upload_file заменить на простой copy()

  Ответить  
 
 автор: Василий   (30.12.2011 в 18:50)   письмо автору
 
   для: speedsoft   (30.12.2011 в 17:41)
 

поменял на
  copy($_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"]); 
   } else {
      echo("Ошибка загрузки файла");
   }


Все равно "Ошибка загрузки файла.

Может все-таки $_FILES["filename"]["tmp_name"], $_SERVER['DOCUMENT_ROOT'].'/upload/'.$_FILES["filename"]["name"]); не так прописан?

  Ответить  
 
 автор: cheops   (30.12.2011 в 18:56)   письмо автору
 
   для: Василий   (30.12.2011 в 18:50)
 

Если у вас выводится "Ошибка загрузки файла", то судя по всем у вас функция is_uploaded_file() почему-то возвращает false, хотя файл $_FILES["filename"]["tmp_name"] явно существует, что видно из дампа. Попробуйте тогда вообще проверку is_uploaded_file() убрать.

  Ответить  
 
 автор: Василий   (30.12.2011 в 19:22)   письмо автору
 
   для: cheops   (30.12.2011 в 18:56)
 

убра проверку.
Файла в папке upload по-прежнему нет. или не видно, потому что зеленый крестик на папке той

  Ответить  
 
 автор: cheops   (30.12.2011 в 19:37)   письмо автору
 
   для: Василий   (30.12.2011 в 19:22)
 

>зеленый крестик на папке той
Что за зеленый крестик?

PS Вы на сервере тестируете или на локальной машине? Лучше для начала локально отладить скрипт - подводных камней меньше, а методов контроля больше.

  Ответить  
 
 автор: Василий   (30.12.2011 в 19:51)   письмо автору
 
   для: cheops   (30.12.2011 в 19:37)
 

тестирую на сервере.
та папка имеет зеленый крестик, помещеный сверху на папке..

  Ответить  
 
 автор: cheops   (30.12.2011 в 19:58)   письмо автору
 
   для: Василий   (30.12.2011 в 19:51)
 

>та папка имеет зеленый крестик, помещеный сверху на папке..
Что это означает на вашем хосте и в вашей системе управления хостом?

  Ответить  
 
 автор: speedsoft   (30.12.2011 в 21:07)   письмо автору
 
   для: Василий   (30.12.2011 в 19:51)
 

А что за хостер и тариф и если можно, дайте ссылку на phpinfo(), может там что на мыли наведет. т.к. cheops прав, is_upload_file должна вернуть тру, ведь дамп показывает что файл передался. Может что-то в конфигурации сервера косяк, хотя мало вероятно.

  Ответить  
 
 автор: Василий   (30.12.2011 в 21:36)   письмо автору
 
   для: speedsoft   (30.12.2011 в 21:07)
 

вот здесь хостинг http://yutex.ru/optim.php

написал им. сейчас проверят

  Ответить  
 
 автор: Василий   (30.12.2011 в 22:22)   письмо автору
 
   для: Василий   (30.12.2011 в 21:36)
 

файлы грузятся, но они отображаются в папке upload при перезагрузке сервера. косяк

  Ответить  
Rambler's Top100
вверх

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