Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Warning: move_uploaded_file


Автор: fakeman 16.5.2009, 12:49
При загрузки файла, картинки выводит такую ошибку:

Warning: move_uploaded_file(phpsite/avatars/r2.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in Z:\home\localhost\www\phpsite\register\register.php on line 98

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'Z:\tmp\php563.tmp' to 'phpsite/avatars/r2.jpg' in Z:\home\localhost\www\phpsite\register\register.php on line 98
Avatar uploadedr2.jpg

код этой страки таков:
Код

$location = "phpsite/avatars/$name";
move_uploaded_file($tmp_name,$location);


в чём причина ? :(

Автор: miki54 16.5.2009, 13:53
$name - это имя файла?

Если да, то ты просто неправильно используешь функцию

http://www.php.su/functions/?move-uploaded-file

Автор: fakeman 17.5.2009, 17:07
miki54,  да это имя файла.. вся фиха в том что адрес  стоял такой phpsite/avatars/$name а надо /home/localhost/www/phpsite/avatars/$name - ок он работает всё кидает в базу в папу avatars файл попадает всё супер, кроме вывода картинки при входе пользователя... он её не отображает с таким путём а вот если бы был такой phpsite/avatars/$name то всё бы отображало... :(  как можно решить данную пролему :(

Автор: miki54 17.5.2009, 17:23
Брр... ты так туманно изясняешься...

Цитата

всё супер, кроме вывода картинки при входе пользователя... он её не отображает с таким путём


Видимо проблема с выводом картинки, тогда просто 

Код

echo "<img src='phpsite/avatars/".$name."'>";

Автор: fakeman 17.5.2009, 17:41
miki54, извените не русский я smile потому так получается..

Цитата(miki54 @  17.5.2009,  17:23 Найти цитируемый пост)
он её не отображает с таким путём

это я имел ввиду что не отображает картинку если путь будет такой /home/localhost/www/phpsite/avatars/$name(Работает с move_uploaded_file) а если такой phpsite/avatars/$name(Выдаёт ошибку Warning: move_uploaded_file....) то всё показывает. 

Что бы вывести картинку из базы я пишу так(сессия)
Код

echo "<img src='".$_SESSION['img']."'>";


Т

Автор: Shark 17.5.2009, 19:59
Цитата

Код

echo "<img src='".$_SESSION['img']."'>";


а в сессии что хранится???какой путь?

чтоб не мучился... вот код, которым я пользуюсь:
Код

//Загрузка аватары
if($_POST['av_load'])
    {
        if(!empty($_FILES['loadsavik']['name']))
        {
            
            $valid_types = array('gif', 'jpg', 'png', 'jpeg', 'tmp');
            $ext = substr($_FILES['loadsavik']['name'],1 + strrpos($_FILES['loadsavik']['name'], '.'));

            if(!in_array($ext, $valid_types))
            {
                echo 'Невозможно загрузить <b>'.$_FILES['loadsavik']['name'].'</b>, т.к. инициализировано <b>неизвестное</b> расширение файла. Допустимые расширения: <b>jpg, jpeg, gif, png</b>';
                exit();
            }

    $max_image_width    = 160;
        $max_image_height    = 160;

    $size = getimagesize($_FILES['loadsavik']['tmp_name']);


    if (($size[0] > $max_image_width) || ($size[1] > $max_image_height) || ($_FILES['loadsavik']['size'] > 50*1024)) 
            {
                echo 'Превышен объем файла';
        exit;
            }

            preg_match('#image\/[x\-]*([a-z]+)#', $_FILES['loadsavik']['type'], $filetype);

            switch ($filetype['1']) 
         {
                case 'jpeg':
                case 'pjpeg':
                case 'jpg': $type = '.jpg';break;
                case 'gif': $type = '.gif';break;
                case 'png': $type = '.png';break;
        case 'tmp': $type = '.tmp';break;
                default:
                    {
                       echo 'Невозможно...';
exit;
                    }
            }

            $image = time().$type;

            if(!move_uploaded_file($_FILES['loadsavik']['tmp_name'] ,getcwd().'/avater/'.$image))
            {
                echo 'Невозможно загрузить изображение <b>'.$_FILES['loadsavik']['name'].'</b>, возможно произошла системная ошибка';
                exit();
        }
        }
        }

Автор: Shark 17.5.2009, 22:10
fakeman, в прошлой тебе ты писал что в $name-хранится адрес... в это теме ты пишешь в переменной $name-хранится имя файла....  ты ничего не путаешь?

Автор: fakeman 17.5.2009, 23:37
Shark, Гхххм чет я запутолся.. в $name хрантся имя файла. Спасиб за код шас буду разбирать smile Отпишу потом.. 

Автор: fakeman 18.5.2009, 00:17
Shark, всёравно вылетает такая ошибка при коде вашем.. :(
Warning: move_uploaded_file(Z:\home\localhost\www\phpsite\register/avatars/1242594119.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in Z:\home\localhost\www\phpsite\register\register.php on line 151

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'Z:\tmp\php134A.tmp' to 'Z:\home\localhost\www\phpsite\register/avatars/1242594119.jpg' in Z:\home\localhost\www\phpsite\register\register.php on line 151
Невозможно загрузить изображение 2.jpg, возможно произошла системная ошибка

Может дело в самом php.ini или он не при чём ? :(

И хотелось бы узнать что делается в этом куске кода ? 
Цитата(Shark @  17.5.2009,  19:59 Найти цитируемый пост)
  preg_match('#image\/[x\-]*([a-z]+)#', $_FILES['loadsavik']['type'], $filetype);
            switch ($filetype['1']) 
         {
                case 'jpeg':
                case 'pjpeg':
                case 'jpg': $type = '.jpg';break;
                case 'gif': $type = '.gif';break;
                case 'png': $type = '.png';break;
        case 'tmp': $type = '.tmp';break;
                default:
                    {
                       echo 'Невозможно...';
exit;
                    }



Автор: Shark 18.5.2009, 01:46
попробуй такую строчку:
Код

if(!move_uploaded_file($_FILES['loadsavik']['tmp_name'] ,getcwd().'/register/avater/'.$image))

Цитата

И хотелось бы узнать что делается в этом куске кода ? 

проверка формата загружаемого авика

Добавлено @ 01:58
у тебя все крутится вокруг этой строчки:
Код

if(!move_uploaded_file($_FILES['loadsavik']['tmp_name'] ,getcwd().'/register/avater/'.$image))


если не работает... то попробуй просто так:
Код

if(!move_uploaded_file($_FILES['loadsavik']['tmp_name'] , '/register/avater/'.$image))

Автор: fakeman 18.5.2009, 02:03
Неа всёравно не работает :( ;(

Автор: Shark 18.5.2009, 02:12
я в пути ошибся... у тя папка называется avatars, а у меня avater и я не изменил... измени название папки в пути на правильное (как у тебя папка называется)

Автор: fakeman 18.5.2009, 02:19
Да я менял всёрано не выходит, но я решил проблемку smile 
Сделал так (на своём скрипте)
Код

$location = "/phpsite/avatars/$name"; //то что пойдёт в базу 
$loc = "/home/localhost/www/phpsite/avatars/$name"; //то куда кинет файл
move_uploaded_file($tmp_name,$loc);
        
$img = mysql_query ("UPDATE users SET img='$location' WHERE username='$login'"); 


И вроде тфу-тфу всё работает smile


Shark,  Огромное спасибо за старания и оказания помащи smile 

Автор: Shark 18.5.2009, 02:29
у тебя в ошибки выдаваласт такая часть в строчке: phpsite\register/avatars/1242594119.jpg

твой вариант:
$loc = "/home/localhost/www/phpsite/avatars/$name"; //то куда кинет файл

что-то я не понимаю ошибку с папкой register в которой находится папка avatars и куда должны грузится авики... а у тебя в пути папку register  я не вижу...

ты уверен что в моем примере ты путь правильно редактировал?

Автор: fakeman 18.5.2009, 02:49
Цитата(Shark @  18.5.2009,  02:29 Найти цитируемый пост)
у тебя в ошибки выдаваласт такая часть в строчке: phpsite\register/avatars/1242594119.jpg


Наверна я в то время папку аватарс перекинул в регистер и путь поменял на 'phpsite/register/avatars/'.$image) тока не пойму почему там слеш в другую сторону но варинант 'phpsite/register/avatars/'.$image) тока проверил всёравно не идёт...

ну вроди правильно.

Автор: Shark 18.5.2009, 02:58
а перед phpsite пробовал ставить черту /

Автор: fakeman 18.5.2009, 03:01
smile:D:D:D Так.
решил я просто всётаки проверить ещё раз и сделал так:
сделал новую папку в register с названием avater
подрегил код под себя а именно 1 слово smile
Код

if(!move_uploaded_file($_FILES['pic']['tmp_name'] ,getcwd().'/avater/'.$image))

всё закачалось!

сразу же сделал ещё 1 експеремент:
вырезал папку avater в phpsite
изменил код
Код

if(!move_uploaded_file($_FILES['pic']['tmp_name'] ,getcwd().'/phpsite/avater/'.$image))

не работает!

занчат вт в чём проблемы были smile Видемо не может move_uploaded_file идти назад. ( ну в плане phpsite/register(обработчик) phpsite/avater(куда слать файл) а если так phpsite/register/avater то всё в одной папе и работает) или он должен и та и так работать где бы не находился обработчик и ппка куда закачавать файлы...

Добавлено через 40 секунд
Цитата(Shark @  18.5.2009,  02:58 Найти цитируемый пост)
а перед phpsite пробовал ставить черту / 

да пробовал.

Автор: Shark 18.5.2009, 03:10
1. ну раз код заработал ставь галко что вопрос решен
2. шаг назад (или как он там называется) обозначается так:
Код

if(!move_uploaded_file($_FILES['pic']['tmp_name'] ,getcwd().'../avater/'.$image))

или

if(!move_uploaded_file($_FILES['pic']['tmp_name'] ,getcwd().'/../avater/'.$image))


просто, поэксперементировать

Автор: fakeman 18.5.2009, 03:21
Цитата(Shark @  18.5.2009,  03:10 Найти цитируемый пост)
ну раз код заработал ставь галко что вопрос решен

Извени за дуратский вопрос но где галку ставить ? smile

Да заработало... Спасиб большое smile smile 


Автор: Shark 18.5.2009, 03:23
где написана тема форума (в самом верху)... там есть зеленая галочка и рядом написано "Пометить как решенный"... нажимай и всеsmile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)