[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Модифицирую Jquery plagin Uploadify
checken
Скачал плагин на сайте http://www.uploadify.com/
Подключил, настроил. Но кое-чего в нём не хватает, поэтому стал пытаться модифицировать. Вообще от него нужно:
-Массовая загрузка фотографий; (Сделал)
-Запись данный о них в БД; (Сделал)
-Изменение размеров.

Вот тут-то и я и остановился.
Для начала код обработчика стандартный:

<?php
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

move_uploaded_file($tempFile,$targetFile);
echo "1";
}
?>

Довольно всё просто, если этот скрипт выводит 1, то процесс загрузки фотографии заканчивается и начинается грузиться следующая. Тут я попытался условие если разнообразить и изменив на следующий код програма перестаёт работать:
include '../../../include/connect.php';
if (!empty($_FILES) and isset($_SESSION['login'])){}

Это проблема номер раз.

Дальше поковырявшись в этом счастье я сделал следующее:
<?php
include '../../../include/connect.php';
if (!empty($_FILES) and isset($_SESSION['login']))
{
function random_text()
{
list($usec, $sec) = explode(" ", microtime());
$mctime = str_replace('.','',((float)$usec + (float)$sec));
$ar = array('1','2','3','4','5','6','7','8','9','0',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','w','z');
for ($i=49;$i>0;$i--)$mctime = str_replace($i,$ar[$i],$mctime);
return $mctime;
};

$tempFile = $_FILES['Filedata']['tmp_name'];
$ext=explode('.', $_FILES['Filedata']['name']);
$from=explode('@', $_GET['from']);
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . random_text().".".$ext[1];
$targetThumbFile = str_replace('//','/',$targetPath) . random_text()."_thumb.".$ext[1];
$max_width = "500"; //Максимальная Ширина обрезаемого файла

function resizeImage($image,$width,$height,$scale)
{
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
$source = imagecreatefromjpeg($image);
imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);
imagejpeg($newImage,$image,90);
chmod($image, 0777);
return $image;
}

function getHeight($image)
{
$sizes = getimagesize($image);
$height = $sizes[1];
return $height;
}

function getWidth($image)
{
$sizes = getimagesize($image);
$width = $sizes[0];
return $width;
}



if(move_uploaded_file($tempFile, $targetFile))
{
chmod($targetFile, 0777);
mysql_query("INSERT INTO `photo` (`id`, `table`, `name`) VALUES ('".$from[0]."', '".$from[1]."', '".random_text().".$ext[1]')");

$width = getWidth($tempFile);
$height = getHeight($tempFile);
$name_file=$_REQUEST['folder'].'/'.random_text().".".$ext[1];
if ($width > $max_width)
{
$scale = $max_width/$width;
resizeImage('../../../'.$_REQUEST['folder'].'/'.random_text().".".$ext[1], $width,$height,$scale);
}
echo "1";
}





}

?>


Проблема в том, что Он в БД записывает данные, а вот резать -нережет.

Вот сам код установки плагина:
</body><head><link href="plugins/upload/css/default.css" rel="stylesheet" type="text/css" />
<link
href="plugins/upload/css/uploadify.css" rel="stylesheet" type="text/css" />
<script
type="text/javascript" src="plugins/upload/scripts/swfobject.js"></script>
<script
type="text/javascript" src="plugins/upload/scripts/jquery.uploadify.v2.1.0.min.js"></script></head>
<body>
<script
type="text/javascript">
$(document).ready(function() {
$("#uploadify").uploadify({
\'uploader\' : \'plugins/upload/scripts/uploadify.swf\',
\'script\' : \'plugins/upload/scripts/uploadify.php?from='.$_GET[id].'@'.$_GET[table].'\',
\'cancelImg\' : \'plugins/upload/cancel.png\',
\'folder\' : \'photo\',
\'queueID\' : \'fileQueue\',
\'auto\' : true,
\'multi\' : true,
\'fileDesc\' : \'Фотографии (JPG, JPEG, GIF, PNG).\',
\'fileExt\' : \'*.jpg;*.gif;*.png;*.jpeg;\',
\'simUploadLimit\' : 10
});
});
</script>
<div
id="fileQueue"></div>
<input
type="file" name="uploadify" id="uploadify" />
<div
id="loadTips"></div>
<p><a
href="javascript:jQuery(\'#uploadify\').uploadifyClearQueue()">Cancel All Uploads</a></p>

в
\'script\'         : \'plugins/upload/scripts/uploadify.php?from='.$_GET[id].'@'.$_GET[table].'\',

Не передаётся почему-то 2 GET параметра сразу, только один, который первый, поэтому я принял решение один параметр from сделать, и два параметра разделить символом '@' а в скрипте обработки разделить explode();



Спустя 5 минут, 53 секунды (29.09.2010 - 13:50) Ice написал(а):
сессию стартанул?

Спустя 3 минуты, 44 секунды (29.09.2010 - 13:54) checken написал(а):
в коннекте первые строки

session_name("SID");
@session_start();


Сейчас все проблемы напишу в первом посте.

Спустя 2 минуты, 17 секунд (29.09.2010 - 13:56) Ice написал(а):
1. засобачил зачем?
2. проверь массив _SESSION на пустоту

Спустя 2 минуты, 53 секунды (29.09.2010 - 13:59) checken написал(а):
Проверял, есть там данные.
Ещё проблема в том, что $_FILES пуста, а он так не считает и всё равно 1 выдаёт при простом заходе на скрипт.
Разсобачил уже

Спустя 31 минута, 17 секунд (29.09.2010 - 14:31) Ice написал(а):
потому что массивы бесполезно проверять при помощи empty, как обычные переменные. Их нужно проверять либо count, либо sizeof

Спустя 57 минут, 14 секунд (29.09.2010 - 15:28) checken написал(а):
Сделал так, но всё равно не работает
if (count($_FILES)!=0 and isset($_SESSION['login']))
//И так тоже не работает
if (isset($_SESSION['login']))


Вообщем отключив то, что написал выше получилось:
<?php
include '../../../include/connect.php';

function random_text()
{
list($usec, $sec) = explode(" ", microtime());
$mctime = str_replace('.','',((float)$usec + (float)$sec));
$ar = array('1','2','3','4','5','6','7','8','9','0',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','w','z');
for ($i=49;$i>0;$i--)$mctime = str_replace($i,$ar[$i],$mctime);
return $mctime;
};

$tempFile = $_FILES['Filedata']['tmp_name'];
$ext=explode('.', $_FILES['Filedata']['name']);
$from=explode('@', $_GET['from']);
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . random_text().".".$ext[1];
$targetThumbFile = str_replace('//','/',$targetPath) . random_text()."_thumb.".$ext[1];
$max_width = 500; //Максимальная Ширина обрезаемого файла

function resizeImage($image,$width,$height,$scale)
{
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
$source = imagecreatefromjpeg($image);
imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);
imagejpeg($newImage,$image,90);
chmod($image, 0777);
return $image;
}

function getHeight($image)
{
$sizes = getimagesize($image);
$height = $sizes[1];
return $height;
}

function getWidth($image)
{
$sizes = getimagesize($image);
$width = $sizes[0];
return $width;
}



move_uploaded_file($tempFile, $targetFile);
chmod($targetFile, 0777);
mysql_query("INSERT INTO `photo` (`id`, `table`, `name`) VALUES ('".$from[0]."', '".$from[1]."', '".random_text().".".$ext[1]."')");
$width = getWidth($tempFile);
$height = getHeight($tempFile);

if ($width > $max_width)
{
$scale = $max_width/$width;
resizeImage('../../..'.$_REQUEST['folder'].'/'.random_text().".".$ext[1], $width,$height,$scale);
}
echo "1";
?>

Не работает нарезка фотографий. Догадка есть, что с адресом проблемы. В корне сайта плагин, посылающий запрос на http://nedv/plugins/upload/scripts/uploadify.php . Фотографии храняться в папке photo в корне. Остался вопрос о нарезке и ифах вверху.

Спустя 37 минут, 52 секунды (29.09.2010 - 16:06) Sonax написал(а):
Я автор

Спустя 6 минут, 34 секунды (29.09.2010 - 16:12) Michael написал(а):
Цитата (Sonax @ 29.09.2010 - 15:06)
Я автор

рады познакомиться с вами, автор. biggrin.gif

Спустя 19 минут, 58 секунд (29.09.2010 - 16:32) Sonax написал(а):
biggrin.gif Я просто ник сменил
Цитата
1. засобачил зачем?

Сейчас только заметил, выдаёт ошибку

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at Z:\home\nedv\www\index.php:1) in Z:\home\nedv\www\include\connect.php on line 3

Спустя 5 часов, 51 минута, 43 секунды (29.09.2010 - 22:24) Ice написал(а):
ну, вот, - стандартная ошибка, - заголовки были отправлены позже вывода, что недопустимо

Спустя 11 часов, 48 минут, 30 секунд (30.09.2010 - 10:12) checken написал(а):
У меня все файлы начинаются с
<?php
include '../../../include/connect.php';

А сам connect.php в первых строкахсоздаёт сессию
<?php
session_name("SID");
@session_start();


Сделал так:
if(count($_FILES)!=0 and isset($_SESSION['login']))


без _SESSION['login'] работает. если просто
if(isset($_SESSION['login']))

то тоже не работает. При echo $_SESSION['login']; выводит Администратор. В чём причина? dry.gif
Так тоже не работает
if($_SESSION['login']=='Администратор')

Спустя 4 месяца, 24 дня, 14 часов, 14 минут, 13 секунд (27.02.2011 - 01:27) Юра написал(а):
Если вопрос еще актуален.
Чтобы менялся размер, сделай:
1)
Здесь:
$width = getWidth($tempFile);
$height = getHeight($tempFile);


Замени $tempFile на $targetFile ( после вызова ф-ции move_uploaded_file() временный файл удаляется, потому должна появляться ошибка)


2)
resizeImage('../../..'.$_REQUEST['folder'].'/'.random_text().".".$ext[1], $width,$height,$scale);

Поменяй на это:
resizeImage($targetFile, $width, $height, $scale);


Ты хочешь менять размер загруженной фотографии, а не какой-то новой.

3)
В самой функции resizeImage(), объяви глобальную переменную $targetThumbFile (иначе для чего она тебе). И в ф-ции imagejpeg($newImage,$image,90); вместо $image подставь эту переменную.
Т.е. функция:

	function resizeImage($image,$width,$height,$scale)
{
global $targetThumbFile;
$newImageWidth = ceil($width * $scale);
$newImageHeight = ceil($height * $scale);
$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight);
$source = imagecreatefromjpeg($image);
imagecopyresampled($newImage,$source,0,0,0,0,$newImageWidth,$newImageHeight,$width,$height);
imagejpeg($newImage, $targetThumbFile,90);
chmod($image, 0777);
return $image;
}


И в функции chmod() не давай право на исполнение загруженного файла, только на чтение.
Быстрый ответ:

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