Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблема с путём к файлу
Форумы портала PHP.SU » » Вопросы новичков » Проблема с путём к файлу

Страниц (1): [1]
 

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

На Денвере всё работало. Перешёл на OpenServer - перестало работать. Получаю ошибку:

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


Попытался заменить разделители на DIRECTORY_SEPARATOR - не помогло.
Решил проверить, существуют ли файлы.
Немного исправил код:
PHP:
скопировать код в буфер обмена
  1. l<?
  2. require_once ("utils.php");
  3.  
  4. class uploadResult {
  5.     var $errCode;
  6.     var $errDescription;
  7.     var $imagePath;
  8. }
  9.  
  10.     $result = new uploadResult();
  11.     $result->imagePath = "";
  12.     $result->errDescription = "";
  13.    
  14. define("UPLOAD_DIR", join(DIRECTORY_SEPARATOR, array(DIRECTORY_SEPARATOR."my-images")));
  15.  
  16. if (!empty($_FILES["myImage"])) {
  17.     $myImage = $_FILES["myImage"];
  18.  
  19.     // проверяем на наличие ошибок при загрузке
  20.     if ($myImage["error"] !== UPLOAD_ERR_OK) {
  21.         $result->errCode = UPLOAD_ERR_OK;
  22.         $result->errDescription = "Ошибка при загрузке файла изображения";
  23.         echo json_encode($result);
  24.         exit;
  25.     }
  26.     $fullPath = file_build_path(UPLOAD_DIR, $myImage["name"]);
  27.     echo ".".UPLOAD_DIR.DIRECTORY_SEPARATOR." - ".(file_exists(".".UPLOAD_DIR.DIRECTORY_SEPARATOR) ? "Файл есть!" : "Файл не найден!");
  28.     exit;

Если в функцию file_exist передаю имя сохраняемого файла, то получаю сообщение, что такой файл есть. Если передаю имя папки куда нужно его поместить, то получаю сообщение, что она не существует.
Пробовал разные варианты: ставил точку слева, два разделителя - не работает, хоть плачь!

Не могу понять, в чём проблема, и как сделать так, чтобы и под Windows работало - так удобнее разрабатывать, и под Linux - на нём хостинг.
(Добавление)
Решил проблему, добавив две точки и разделитель перед именем целевой папки. Т.е строка, задающая целевую папку выглядит так:
PHP:
скопировать код в буфер обмена
  1. define("UPLOAD_DIR", join(DIRECTORY_SEPARATOR, array("..", "ьн-images")));


Осталось только проверить, будет ли это работать в Linux...
2. OrmaJever - 13 Февраля, 2017 - 15:00:19 - перейти к сообщению
Есть прекрасная константа __DIR__, попробуйте использовать её
3. maxapet - 13 Февраля, 2017 - 15:05:13 - перейти к сообщению
OrmaJever пишет:
Есть прекрасная константа __DIR__, попробуйте использовать её

Спасибо, посмотрю, что это такое, попробую использовать.

 

Powered by ExBB FM 1.0 RC1