Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98

Ошибка при сохранении загруженного файла

09.02.2017, 16:26. Показов 2433. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую OpenServer/
Для загрузки и сохранения изображений написал такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?
class uploadResult {
    var $errCode;
    var $errDescription;
    var $imagePath;
}
 
    $result = new uploadResult();
    $result->imagePath = "";
    $result->errDescription = "";
    
define("UPLOAD_DIR", "/my-images/");
 
if (!empty($_FILES["myImage"])) {
    $myImage = $_FILES["myImage"];
 
    // проверяем на наличие ошибок при загрузке
    if ($myImage["error"] !== UPLOAD_ERR_OK) {
        $result->errCode = UPLOAD_ERR_OK;
        $result->errDescription = "Ошибка при загрузке файла изображения";
        echo json_encode($result);
        exit;
    }
 
    $name = $myImage["name"];
 
    // перемещаем файл в постоянное место хранения
    $success = move_uploaded_file($myImage["tmp_name"], UPLOAD_DIR.$name);
    if (!$success) { 
        $result->errCode = 1;
        $result->imagePath = UPLOAD_DIR.$name . $myImage["tmp_name"];
        $result->errDescription = "Ошибка при перемещении загруженного файла в место постоянного хранения";
        echo json_encode($result);
        exit;
    }
 
    // задаем права на новый файл
    chmod(UPLOAD_DIR . $name, 0644);
    
    $result->errCode = 0;
    $result->imagePath = UPLOAD_DIR.$name;// . $myImage["tmp_name"];
    $result->errDescription = "Файл " . $myImage["tmp_name"] . " загружен на сервер";
    echo json_encode($result);
    exit;
} else {
        echo "<p>Произошла ошибка.</p>";
        exit;
    
}
?>
Почему-то при сохранении получаю такую ошибку:

Warning: move_uploaded_file(/my-images/DSC00753.JPG): failed to open stream: No such file or directory in D:\OpenServer\domains\my-gen\scripts\loadImage.php on line 28

Warning: move_uploaded_file(): Unable to move 'D:\OpenServer\userdata\temp\phpEE1F.tmp ' to '/my-images/DSC00753.JPG' in D:\OpenServer\domains\my-gen\scripts\loadImage.php on line 28

Не могу понять в чём проблема? Во-первых, папка такая есть; во-вторых, раньше всё работало, но на Denwer'е.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.02.2017, 16:26
Ответы с готовыми решениями:

Ошибка при сохранении файла из phpexcel
При сохранении файла выдается ошибка: Fatal error: Class 'PHPExcel_Shared_OLE_PPS_File' not found in /Classes/PHPExcel/Writer/Excel5.php...

Ошибка при сохранении файлов на сервер
Доброго времени суток. Несколько дней я работаю над загрузкой фалов, раньше у меня сё работало, но когда стал всё &quot;переносить&quot; -...

Не печатается таблица при сохранении файла с расширением HTML
вот исходный код:

26
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
09.02.2017, 16:38
1. Относительные - абсолютные пути - жуткая путаница, используйте для начала абсолютные пути
2. Судя по ошибке Вы работаете под виндой, а там разделитель папок в другую сторону наклонен / -> \
1
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
09.02.2017, 16:42  [ТС]
А в чём путаница? Хотел использовать абсолютный путь, т.к. скрипт находится в отдельной папке.
И как можно, если можно, сделать так, чтобы и под Windows и под Linux работало? А то перенесу на хостинг с Linux? и придётся переделывать?

Добавлено через 37 секунд
А в чём путаница? Хотел использовать абсолютный путь, т.к. скрипт находится в отдельной папке.
И как можно, если можно, сделать так, чтобы и под Windows и под Linux работало? А то перенесу на хостинг с Linux? и придётся переделывать?
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
09.02.2017, 16:43
http://php.net/manual/ru/dir.constants.php -> DIRECTORY_SEPARATOR
1
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
13.02.2017, 08:23  [ТС]
Не помогло. Теперь получаю такую ошибку:


Fatal error: Uncaught exception 'ExceptionWarning' with message 'move_uploaded_file(\\my-images\\DSC00661.JPG): failed to open stream: No such file or directory...
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
13.02.2017, 11:00
Код в студию, и судя по ошибке, у вас DIRECTORY_SEPARATOR дважды в пути используется...
1
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
13.02.2017, 12:21  [ТС]
Что-то нифига я в этом php не пойму.
Мне нужно, чтобы файл переместился в папку относительно корня сайта, потом вернуть этот адрес клиенту, чтобы на его странице отобразилась выбранная картинка. Как указать, что папка относительно корня берётся?
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
13.02.2017, 13:03
Адресация идет относительно первого "запущенного" файла, если этот файл в корне (обычно так и есть), то адресация будет относительно корня.
Также не забывайте, что путь от корня до файла не будет совпадать с адресом в броузере - т.к. винда / -> \
ЗЫ у Вас нет проблем с логикой программы, у Вас чисто детские ошибки от невнимательности, так что покажите последний код, найдем ошибки.
1
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
13.02.2017, 13:19  [ТС]
Сейчас код вот такой:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
l<?
require_once ("utils.php");
 
class uploadResult {
    var $errCode;
    var $errDescription;
    var $imagePath;
}
 
    $result = new uploadResult();
    $result->imagePath = "";
    $result->errDescription = "";
    
define("UPLOAD_DIR", join(DIRECTORY_SEPARATOR, array(DIRECTORY_SEPARATOR."my-images")));
 
if (!empty($_FILES["myImage"])) {
    $myImage = $_FILES["myImage"];
 
    // проверяем на наличие ошибок при загрузке
    if ($myImage["error"] !== UPLOAD_ERR_OK) {
        $result->errCode = UPLOAD_ERR_OK;
        $result->errDescription = "Ошибка при загрузке файла изображения";
        echo json_encode($result);
        exit;
    }
    $fullPath = file_build_path(UPLOAD_DIR, $myImage["name"]);
    echo ".".UPLOAD_DIR.DIRECTORY_SEPARATOR." - ".(file_exists(".".UPLOAD_DIR.DIRECTORY_SEPARATOR) ? "Файл есть!" : "Файл не найден!");
    exit;
Пытаюсь проверить, существует ли папка для картинок. Говорит, что её нет. Если подставить имя загружаемого файла, то он существует.
Скрипт запускается из папки scripts, которая находится в корне сайта.
Пытался делать без ведущей точки - тот же результат.
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
13.02.2017, 13:27
Ну вот почему все так страшаться показать весь код. Не могу я сказать где у Вас ошибка, когда все обрезано, даже функции, в которой возникает ошибка, в данном куске нет.
1
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
13.02.2017, 13:39  [ТС]
Код я привёл в самом начале. Это полный код того самого скрипта, который вызывается через AJAX. Код находится в папке scripts, которая находится в корне сайта. Сейчас я пытаюсь постепенно продвигаться.
Я, вот, нашёл, что папка назначения якобы не существует, теперь пытаюсь понять, почему. На Денвере всё работало. Там строка
PHP
1
define("UPLOAD_DIR", "/my-images/");
давала мне путь к нужной папке. На OpenServer это не работает.
Вы сказали, что неправильные разделители, я использую системный разделитель - не помогает. Значит, что-то с путём не так.

Добавлено через 1 минуту
В данном случае, функция file_exist, при передаче в неё адреса, куда нужно переместить файл, говорит, что такая папка не существует.
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
13.02.2017, 13:45
Я Вам не экстрасенс, я хз как и где Вы сделали правки, не хотите/лень/или другая причуда показывать код - Ваша проблема.
1
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
13.02.2017, 15:48  [ТС]
Исходный код - в первом посте. Код с правками я привёл. Ничего больше у меня нет.
За попытку помочь - спасибо большое.

Добавлено через 1 час 59 минут
Решил проблему, добавив две точки и разделитель перед именем папки. Т.е. строка, определяющая папку для загрузки выглядит так:
PHP
1
define("UPLOAD_DIR", join(DIRECTORY_SEPARATOR, array("..", "my-images")));
Теперь осталось узнать, будет ли это работать в Linux. Но это время покажет
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
13.02.2017, 16:53
Цитата Сообщение от maxapet Посмотреть сообщение
Решил проблему, добавив две точки и разделитель
Две точки - это адрес родительской директории по отношению к текущей. Не пробовали вместо двух точек подставлять $_SERVER['DOCUMENT_ROOT']?
1
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
14.02.2017, 13:57  [ТС]
Спасибо, работает. И получается, что для Windows не важно какой используется разделитель в адресе: \, / или оба вместе. Главное, чтобы правильно был указана последовательность папок.

Добавлено через 9 минут
Но в случае использование этой константы картинка не отображается на клиенте. А с двумя точками - отображается.

Добавлено через 1 минуту
Но в случае использование этой константы картинка не отображается на клиенте. А с двумя точками - отображается.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
14.02.2017, 14:05
Цитата Сообщение от maxapet Посмотреть сообщение
Но в случае использование этой константы картинка не отображается на клиенте. А с двумя точками - отображается.
Зависит от того, как вы его отображаете и где находится папка my-mages.
0
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
14.02.2017, 14:17  [ТС]
Я передаю клиенту полный путь, который получаю в строке
PHP
1
define("UPLOAD_DIR", join(DIRECTORY_SEPARATOR, array($_SERVER["DOCUMENT_ROOT"], "my-images")));
+ имя файла. Но если использовать $_SERVER["DOCUMENT_ROOT"] вместо двух точек, то получается путь не в корень сайта, а в корень файловой системы сайта. Поэтому и не отображается картинка.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
14.02.2017, 15:41
Цитата Сообщение от maxapet Посмотреть сообщение
то получается путь не в корень сайта, а в корень файловой системы сайта
Не вижу разницы между этими двумя понятиями. Вы передаёте браузеру относительный путь, который он (браузер) в состоянии преобразовать к URL, и в том случае, который предложил вам я, передаётся путь, но уже абсолютный, и браузер и его преобразует к URL, потому что с путями браузер не дружит, но этот URL становится некорректным( http://имя_вашего_сайта/(текущий_URL)/полный_путь_до_картинки_в_файловой_системе_сайта)
0
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 98
15.02.2017, 09:00  [ТС]
Не работает вариант с $_SERVER["DOCUMENT_ROOT"] - картинки не отображается, а с двумя точками отображается.
0
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
15.02.2017, 09:11
maxapet, вы меня снова не поняли, поэтому объясню по-другому. Создаёте не одну константу с путём до папки, а две - одну с путём до папки, а вторую с URL
PHP
1
2
define('UPLOAD_DIR', $_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR.'my-images'/);
define('IMAGES_URL', 'http://имя_вашего_сайта/my-images/');
И теперь там, где переносите из временной папки в свою, используете константу UPLOAD_DIR.'имя_файла', а где нужно отдать картинку браузеру – IMAGES_URL.'имя_файла'. Но если ваш вариант работает, то можете не заморачиваться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2017, 09:11
Помогаю со студенческими работами здесь

Перемещение загруженного файла
Привет!:) Почему не работает функция move_uploaded_file()? Ругается на второй параметр. Код: $folder = &quot;clients/&quot;;...

Как сделать отображение загруженного файла
Проблема вот в чем создал загрузку все работает грузит в папку,но как сделать что файл ещё отображался на страничке? Вообще не получается!!...

Хранение имени загруженного файла до конца работы
Привет! Есть вопрос. Написал скрипт загрузки файла. Но возникла проблема, как сделать чтоб я мог делать манипуляции именно с этим...

Проблема при сохранении загруженного файла в базу
Привет всем! Я пытаюсь загрузить файл на сервер и сохранить его в поле image Для этого использую следующий код Set...

Ошибка при сохранении файла
Почему при сохранении файла, если для формирования его имени использовать DateToStr(Now()) и TimeToStr(Now()) происходит ошибка? void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru