Здравствуйте всем! Описываю всё по порядку, готовьтесь, будет много кода.
Итак есть очень простой кусок кода:
Код | if (is_uploaded_file($_FILES['filename']['tmp_name'])) { move_uploaded_file($_FILES['filename']['tmp_name'], FULL_UPLOAD_PATH . '/' . $cat_name . '/' . $_FILES['filename']['name']); resize_image(FULL_UPLOAD_PATH . '/' . $cat_name . '/' . $_FILES['filename']['name'], $cat_name, 'resized'); resize_image_by_width(FULL_UPLOAD_PATH . '/' . $cat_name . '/' . $_FILES['filename']['name'], $category . '_mini500', 500); resize_image_by_width(FULL_UPLOAD_PATH . '/' . $cat_name . '/' . $_FILES['filename']['name'], $category . '_mini100_1', 150); resize_image_by_width(FULL_UPLOAD_PATH . '/' . $cat_name . '/' . $_FILES['filename']['name'], $category . '_mini100_2', 150); resize_image_by_width(FULL_UPLOAD_PATH . '/' . $cat_name . '/' . $_FILES['filename']['name'], $category . '_mini100_3', 150); $_SESSION['filename'] = $_FILES['filename']['name']; $query= 'INSERT INTO items (item_cat_id, item_photo, item_name) VALUES ("'.$category.'", "resized_'.$_FILES['filename']['name'].'", "'.$db->escape($object_name).'")'; $db->query($query); $message['result'] = true; echo 'Всё загружено'; die(); }
|
Что он делает? Проверяет, если файл загружен нормально то перемещает его по указанному месту, а к готовому файлу применяются некоторые функции. Вот пример функции:
Код |
function resize_image_by_width($source_file, $prefix, $dstwidth) { if (!is_image($source_file)) { return false; }
global $path; $source_image_info = getimagesize($source_file);
$source_width = $source_image_info[0]; $source_height = $source_image_info[1];
$ext = get_file_extension($source_file); switch ($ext) { case 'jpg': case 'jpeg': $create_function = 'imagecreatefromjpeg'; $save_function = 'imagejpeg'; $extension = 'jpg'; break; case 'gif': $create_function = 'imagecreatefromgif'; $save_function = 'imagegif'; $extension = 'gif'; break;
case 'png': $create_function = 'imagecreatefrompng'; $save_function = 'imagepng'; $extension = 'png'; break;
default: $create_function = ''; $save_function = ''; $extension = ''; break; }
if ($dstwidth < 10) { return false; }
$ratio = $dstwidth / $source_width; $dstheight = $source_height * $ratio;
$source_image = $create_function($source_file);
$dest_image = imagecreatetruecolor($dstwidth, $dstheight); imagecopyresampled($dest_image, $source_image, 0, 0, 0, 0, $dstwidth, $dstheight, $source_width, $source_height); $save_function($dest_image, $path . $prefix . '_' . get_pure_file_name($source_file) . '.' . $extension); imagedestroy($dest_image); }
|
В результате работы этой функции некоторый файлик должен сохраниться по некоторому указанному пути. Проблема в том, что он не сохраняется, выдавая при этом ошибку следующего содержания:
Код |
Warning: imagejpeg() [<a href="function.imagejpeg">function.imagejpeg</a>]: Unable to open '6_mini500_shop.jpg' for writing: Permission denied in <b>XXX</b> on line 174
|
Думаю, что суть ошибки понятна. Функция просто не может сохранить файл из-за ошибки прав доступа. Да, вместо XXX (я нарочно убрал полный путь к файлу из соображений безопасности) прописано полное имя того php-файла, где эта функция определена. [/code]
Папка и подпапка, в которую я пытаюсь загрузить рисунки, имеют полные права 0777. Владелец этих папок - пользователь, под которым я захожу на ftp сервер.
Вопрос: почему недостаточно прав доступа для работы функций? Что предпринять в данном случае? |