[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Трагедия с move_uploaded_file и windows 7
nugle
Копирую картинку в другую папку. После копирования, я захожу в папку и щелкую два раза по картинки. Появляется надпись: "Средство просмотра фотографий Windows не может открыть изображение, так как отсутствует разрешение на доступ к расположению файла." У папки полное разрешение, в чем может быть дело? ОС - windows 7. Но самое дивное, что потом, когда вывожу картинку в браузере, то она видна

Класс добавления картинки на сайт

Свернутый текст
<?php

/* Класс загрузки файлов на сервер */
class uploadFiles
{
public $extensions;
public $error;
public $size;
public $size_name;
public $src_img;
public $name;
public $i;

public function __construct($extensions, $upload_dir){
$this->extensions = $extensions;
$this->error = '';
$this->src_img = '';
$this->upload_dir = $upload_dir;
}

public function cycleFiles(){
$this->size = count($_FILES['userfile']['name']);
$this->size_name = $_FILES['userfile']['name'][0];
if(!empty($this->size_name))
for($this->i=0; $this->i < $this->size; $this->i++)
{
$this->name = time().'_'.translit($_FILES['userfile']['name'][$this->i]);
$this->error = $this->uploadHandle(1000, $this->extensions, $this->upload_dir, $this->i, $this->name);
$this->src_img .= $this->name.', ';
}
if(empty($this->error))
return $this->src_img;
else
echo $this->error;
return false;
}

public function uploadHandle($max_file_size = 100, $valid_extensions = array(), $upload_dir = '.',$i, $name)
{
$max_file_size *= 1024;

if ($_FILES['userfile']['error'][$i] === UPLOAD_ERR_OK)
{
// проверяем расширение файла
$file_extension = pathinfo($_FILES['userfile']['name'][$i], PATHINFO_EXTENSION);
if (in_array($file_extension, $valid_extensions))
{
// проверяем размер файла
if ($_FILES['userfile']['size'][$i] < $max_file_size)
{
$destination = $upload_dir .'/' . $name;

if (!move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $destination))
$this->error = 'Не удалось загрузить файл';
}
else
$this->error = 'Размер файла больше допустимого';
}
else
$this->error = 'У файла недопустимое расширение';
}
else
{
// массив ошибок
$error_values = array(

UPLOAD_ERR_INI_SIZE => 'Размер файла больше разрешенного директивой upload_max_filesize в php.ini',
UPLOAD_ERR_FORM_SIZE => 'Размер файла превышает указанное значение в MAX_FILE_SIZE',
UPLOAD_ERR_PARTIAL => 'Файл был загружен только частично',
UPLOAD_ERR_NO_FILE => 'Не был выбран файл для загрузки',
UPLOAD_ERR_NO_TMP_DIR => 'Не найдена папка для временных файлов',
UPLOAD_ERR_CANT_WRITE => 'Ошибка записи файла на диск'

);

$error_code = $_FILES['userfile']['error'][$i];

if (!empty($error_values[$error_code]))
$this->error = $error_values[$error_code];
else
$this->error = 'Случилось что-то непонятное';
}
return $this->error;
}

}






Спустя 4 часа, 13 минут, 58 секунд (10.02.2012 - 17:50) walerus написал(а):
Попробуй через меню ( на файле ) Общий доступ, сделать общий доступ для Всех...
Или Unlock'ером посмотри какой процесс держит файл.

Или же попробуй после загрузки файла, установить права
chmod( $destination, 0777 );

Спустя 14 минут, 51 секунда (10.02.2012 - 18:04) nugle написал(а):
walerus
Так с изображением все норм, показывает 0666 права, сейчас анлокером попробую

устанавливаю права так
$destination = $upload_dir .'/' . $name; 
$result = move_uploaded_file($_FILES['userfile']['tmp_name'][$i], $destination);
if (!$result)
$this->error = 'Не удалось загрузить файл';
chmod (SPH_ROOT.$destination, 0777);
echo substr(sprintf('%o', fileperms(SPH_ROOT.$destination)), -4);

Но пишет, что права по прежнему 0666.
Анлокер ведь для удаления файлов или я не про тот, если не про тот кинь ссылку, пожалуйста!

Спустя 38 минут, 34 секунды (10.02.2012 - 18:43) Игорь_Vasinsky написал(а):
анлокер покажет каким приложением занята картинка - если есть чё - разблокируй от всего.. но сдаётся мне дело не в этом.

В свойствах атрибуты какие стоят? под виндой или где тестишь?

Спустя 3 минуты, 41 секунда (10.02.2012 - 18:47) nugle написал(а):
Игорь_Vasinsky
I'm sorry, в свойствах чего?
Под виндой 7. Так уже она меня задрала) но времени нет перейти на другую ось. Было бы все ништяк, если бы я закинул все на хостинг, но пока тестирую, не хочу проверять с хостинга

Спустя 2 часа, 33 минуты, 10 секунд (10.02.2012 - 21:20) walerus написал(а):
Unlock, как скачаешь отпишись, потру с хостинга biggrin.gif

И странно, если права стоят 0666, то ты их не сменил получается, попробуй сменить папку с куда записываешь файлы, на локале какой путь до скриптов ? Не c:\Program Files\... и так далее ?, если так, то вынеси в другую папку вообще, т.к. винда блокирует все что к програм филес

Спустя 8 минут, 38 секунд (10.02.2012 - 21:29) nugle написал(а):
walerus
Цитата
Unlock, как скачаешь отпишись, потру с хостинга  biggrin.gif

Аммм... конечно, только дай докачаю biggrin.gif

Проблема, что и в другую, которая рядом лежит, я тоже туда загружая и там такая же беда. Не, не в программ файл лежит
путь вот такого вида
C:/WebServers/home/fiesta-2000/www

Спустя 15 минут, 10 секунд (10.02.2012 - 21:44) walerus написал(а):
nugle - В общем, только что на 7ке скопировали фотку, все открывается без проблем. Попробуй без класса скопировать фотку, copy(); и погляди будут ли изменения.

Спустя 6 минут, 9 секунд (10.02.2012 - 21:50) nugle написал(а):
с помощью copy() все прекрасно копируется и все видно, а с помощью move_uploaded_file не хочет. Копировал также в классе, только функцию заменил

Спустя 9 минут, 21 секунда (10.02.2012 - 21:59) walerus написал(а):
Еще начитал, что у людей тоже были проблемы с move_uploaded_file, заменили на copy(); и unlink();

Спустя 5 минут, 40 секунд (10.02.2012 - 22:05) nugle написал(а):
walerus
http://phpforum.ru/txt/index.php/en/t44225.html
вот тут linker говорит, что лучше использовать move_uploaded_file

Спустя 51 минута, 29 секунд (10.02.2012 - 22:56) walerus написал(а):
Цитата (nugle @ 10.02.2012 - 19:05)
walerus
http://phpforum.ru/txt/index.php/en/t44225.html
вот тут linker говорит, что лучше использовать move_uploaded_file

Та то понятно что оно проверяет на POST параметр )), попробуй права поставить не на файл, а на папку.

chmod (SPH_ROOT.$upload_dir, 0777);
, вроде как америкосы посоветовали.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.