<form action="" method="post">
<input type="file" name="fupload" /><input type="submit" name="post" />
</form>
<?php
if (isset($_POST['post'])) {
if (!empty($_POST['fupload'])) {
$fupload = $_POST['fupload'];
$fupload = trim($fupload);
if ($fupload == '' or empty($fupload)) {
unset($fupload);
}
if (!isset($fupload) or empty($fupload) or $fupload == '') {
$logotype = "/modules/teams/logotypes/nologo.png";
} else {
$path_to_90_directory = '/modules/teams/logotypes/';
$filename = $_FILES['fupload']['name'];
$source = $_FILES['fupload']['tmp_name'];
$target = $path_to_90_directory . $filename;
move_uploaded_file($source, $target);
if (preg_match('/[.](GIF)|(gif)$/', $filename)) {
$im = imagecreatefromgif($path_to_90_directory . $filename);
}
if (preg_match('/[.](PNG)|(png)$/', $filename)) {
$im = imagecreatefrompng($path_to_90_directory . $filename);
}
if (preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
$im = imagecreatefromjpeg($path_to_90_directory . $filename);
}
$w = 180;
$w_src = imagesx($im);
$h_src = imagesy($im);
$dest = imagecreatetruecolor($w, $w);
if ($w_src > $h_src) {
imagecopyresampled($dest, $im, 0, 0, round((max($w_src, $h_src) - min($w_src, $h_src)) /
2), 0, $w, $w, min($w_src, $h_src), min($w_src, $h_src));
}
if ($w_src < $h_src) {
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, min($w_src, $h_src), min($w_src,
$h_src));
}
if ($w_src == $h_src) {
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
}
$date = time();
imagejpeg($dest, $path_to_90_directory . $date . ".jpg");
$logotype = $path_to_90_directory . $date . ".jpg";
$delfull = $path_to_90_directory . $filename;
unlink($delfull);
}
echo $logotype;
} #ADD UPLOAD LOGO
} #EMPTY POST
?>
Не добавляет изображение в папку
Спустя 53 минуты, 44 секунды (13.08.2011 - 22:17) waldicom написал(а):
Нужно добавить enctype="multipart/form-data" в форму
<form action="" method="post" enctype="multipart/form-data" >
Спустя 5 минут, 51 секунда (13.08.2011 - 22:23) cyberside написал(а):
Проблема не решилась
Спустя 4 минуты, 7 секунд (13.08.2011 - 22:27) waldicom написал(а):
Пути абсолютные? Потому что если пути начинаются со слэша, то это корень диска, а в данном случае перед '/modules/teams/logotypes/' наверняка должен еще быть путь к этой директории на диске. Что-то типа
$path_to_90_directory = '/var/www/mysite/modules/teams/logotypes/';
$path_to_90_directory = '/var/www/mysite/modules/teams/logotypes/';
Спустя 1 минута, 41 секунда (13.08.2011 - 22:29) m4a1fox написал(а):
Какие выдает ошибки? Тут нет экстрасенссов!
Спустя 2 минуты, 7 секунд (13.08.2011 - 22:31) cyberside написал(а):
Изменил на $path_to_90_directory = 'modules/teams/logotypes/'; изображение загрузилось, но оно полностью чорное... Вот для глаза php.cs-cups.ru
Спустя 11 часов, 41 минута, 27 секунд (14.08.2011 - 10:12) killer8080 написал(а):
cyberside
этот скрипт вообще работать не может
Да и вообще много избыточных проверок, бесполезная операция move_uploaded_file и т.п.
Я так и не понял логику преобразования картинок. Нужно их привести к квадрату 180x180, с обрезкой или что?
Тут проще всё с нуля переписать, чем исправлять.
этот скрипт вообще работать не может
if (!empty($_POST['fupload'])) {откуда возьмётся $_POST['fupload']?
...
Да и вообще много избыточных проверок, бесполезная операция move_uploaded_file и т.п.
Я так и не понял логику преобразования картинок. Нужно их привести к квадрату 180x180, с обрезкой или что?
Тут проще всё с нуля переписать, чем исправлять.
Спустя 4 минуты, 9 секунд (14.08.2011 - 10:16) cyberside написал(а):
Ну в идеале мне нужно, что бы изображение подгонялось под ширену 180
Спустя 36 минут, 22 секунды (14.08.2011 - 10:53) linker написал(а):
Вынеси код пережатия картинки под нужный размер в отдельную функцию, так будет легче читать код и дебажить.
Спустя 46 минут, 54 секунды (14.08.2011 - 11:40) killer8080 написал(а):
cyberside
накидал вариант, но не проверял, возможно есть ошибки. Пробуй
накидал вариант, но не проверял, возможно есть ошибки. Пробуй
$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/modules/teams/logotypes/';
if(ulpoad_image('fupload', $upload_dir, 180, $message)){
echo 'Файл загружен: '.$message;
}
else{
echo 'Ошибка: '.$message;
}
function upload_image($name, $upload_dir, $dst_max_side, &$message){
if(empty($_FILES[$name])){
$message = 'файл не загружен';
return false;
}
$img = getimagesize($_FILES[$name]['tmp_name']);
if(!$img || strpos($img['mime'], 'image/') !== 0){
$message = 'загруженный файл не является изображением';
return false;
}
$func = 'imagecreatefrom'.substr($img['mime'], strpos($img['mime'], '/') + 1);
if(!function_exists($func)){
$message = 'формат изображения не поддерживается';
return false;
}
$src_im = $func($_FILES[$name]['tmp_name']);
$width = $img[0] >= $img[1] ? $dst_max_side : ($img[0] * $dst_max_side / $img[1]);
$height = $img[1] >= $img[0] ? $dst_max_side : ($img[1] * $dst_max_side / $img[0]);
$dst_im = imagecreatetruecolor($width, $height);
imagecopyresampled($dst_im, $src_im, 0, 0, 0, 0, $width, $height, $img[0], $img[1]);
$file = rtrim($upload_dir, '/').'/'.time().'.jpg';
imagejpeg($dst_im, $file, 75);
imagedestroy($src_im);
imagedestroy($dst_im);
$message = $file;
return true;
}
Спустя 10 минут, 58 секунд (14.08.2011 - 11:51) cyberside написал(а):
Не загружает, да и ошибки никакой не выводит на экран...
Спустя 4 минуты, 22 секунды (14.08.2011 - 11:55) killer8080 написал(а):
включи error_reporting(E_ALL);
Спустя 3 минуты, 48 секунд (14.08.2011 - 11:59) cyberside написал(а):
Fatal error: Call to undefined function ulpoad_image() in /var/www/myhost/data/www/php.cs-cups.ru/index.php on line 7
if(ulpoad_image('fupload', $upload_dir, 180, $message)){
Спустя 2 минуты, 48 секунд (14.08.2011 - 12:02) killer8080 написал(а):
Цитата |
Fatal error: Call to undefined function ulpoad_image() |
странно, ты полностью скопировал код? Попробуй поменять местами вызов функции и объявление. Хотя это влиять не должно.
Спустя 55 секунд (14.08.2011 - 12:03) cyberside написал(а):
Ну вот весь код:
<form action="" method="post">
<input type="file" name="fupload" /><input type="submit" />
</form>
<?php
$upload_dir = 'modules/teams/logotypes/';
if(ulpoad_image('fupload', $upload_dir, 180, $message)){
echo 'Файл загружен: '.$message;
}
else{
echo 'Ошибка: '.$message;
}
function upload_image($name, $upload_dir, $dst_max_side, &$message){
if(empty($_FILES[$name])){
$message = 'файл не загружен';
return false;
}
$img = getimagesize($_FILES[$name]['tmp_name']);
if(!$img || strpos($img['mime'], 'image/') !== 0){
$message = 'загруженный файл не является изображением';
return false;
}
$func = 'imagecreatefrom'.substr($img['mime'], strpos($img['mime'], '/') + 1);
if(!function_exists($func)){
$message = 'формат изображения не поддерживается';
return false;
}
$src_im = $func($_FILES[$name]['tmp_name']);
$width = $img[0] >= $img[1] ? $dst_max_side : ($img[0] * $dst_max_side / $img[1]);
$height = $img[1] >= $img[0] ? $dst_max_side : ($img[1] * $dst_max_side / $img[0]);
$dst_im = imagecreatetruecolor($width, $height);
imagecopyresampled($dst_im, $src_im, 0, 0, 0, 0, $width, $height, $img[0], $img[1]);
$file = rtrim($upload_dir, '/').'/'.time().'.jpg';
imagejpeg($dst_im, $file, 75);
imagedestroy($src_im);
imagedestroy($dst_im);
$message = $file;
return true;
}
?>
Спустя 4 минуты, 59 секунд (14.08.2011 - 12:08) killer8080 написал(а):
а так?
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fupload" /><input type="submit" />
</form>
<?php
function upload_image($name, $upload_dir, $dst_max_side, &$message){
if(empty($_FILES[$name])){
$message = 'файл не загружен';
return false;
}
$img = getimagesize($_FILES[$name]['tmp_name']);
if(!$img || strpos($img['mime'], 'image/') !== 0){
$message = 'загруженный файл не является изображением';
return false;
}
$func = 'imagecreatefrom'.substr($img['mime'], strpos($img['mime'], '/') + 1);
if(!function_exists($func)){
$message = 'формат изображения не поддерживается';
return false;
}
$src_im = $func($_FILES[$name]['tmp_name']);
$width = $img[0] >= $img[1] ? $dst_max_side : ($img[0] * $dst_max_side / $img[1]);
$height = $img[1] >= $img[0] ? $dst_max_side : ($img[1] * $dst_max_side / $img[0]);
$dst_im = imagecreatetruecolor($width, $height);
imagecopyresampled($dst_im, $src_im, 0, 0, 0, 0, $width, $height, $img[0], $img[1]);
$file = rtrim($upload_dir, '/').'/'.time().'.jpg';
imagejpeg($dst_im, $file, 75);
imagedestroy($src_im);
imagedestroy($dst_im);
$message = $file;
return true;
}
$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/modules/teams/logotypes/';
if(ulpoad_image('fupload', $upload_dir, 180, $message)){
echo 'Файл загружен: '.$message;
}
else{
echo 'Ошибка: '.$message;
}
?>
Спустя 1 минута, 23 секунды (14.08.2011 - 12:09) cyberside написал(а):
Тоже самое
Спустя 3 минуты, 41 секунда (14.08.2011 - 12:13) cyberside написал(а):
А способ загрузки из URL?
Спустя 8 минут, 50 секунд (14.08.2011 - 12:21) killer8080 написал(а):
Цитата (cyberside @ 14.08.2011 - 12:13) |
А способ загрузки из URL? |
в смысле?
вот проверил рабочий вариант, только нет защиты от F5
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fupload" /><input type="submit" />
</form>
<?php
$upload_dir = $_SERVER['DOCUMENT_ROOT'].'/modules/teams/logotypes/';
if(upload_image('fupload', $upload_dir, 180, $message)){
echo 'Файл загружен: '.$message;
}
else{
echo 'Ошибка: '.$message;
}
function upload_image($name, $upload_dir, $dst_max_side, &$message){
if(empty($_FILES[$name])){
$message = 'файл не загружен';
return false;
}
$img = getimagesize($_FILES[$name]['tmp_name']);
if(!$img || strpos($img['mime'], 'image/') !== 0){
$message = 'загруженный файл не является изображением';
return false;
}
$func = 'imagecreatefrom'.substr($img['mime'], strpos($img['mime'], '/') + 1);
if(!function_exists($func)){
$message = 'формат изображения не поддерживается';
return false;
}
$src_im = $func($_FILES[$name]['tmp_name']);
$width = $img[0] >= $img[1] ? $dst_max_side : ($img[0] * $dst_max_side / $img[1]);
$height = $img[1] >= $img[0] ? $dst_max_side : ($img[1] * $dst_max_side / $img[0]);
$dst_im = imagecreatetruecolor($width, $height);
imagecopyresampled($dst_im, $src_im, 0, 0, 0, 0, $width, $height, $img[0], $img[1]);
$file = rtrim($upload_dir, '/').'/'.time().'.jpg';
imagejpeg($dst_im, $file, 75);
imagedestroy($src_im);
imagedestroy($dst_im);
$message = $file;
return true;
}
?>
Спустя 2 минуты, 54 секунды (14.08.2011 - 12:24) cyberside написал(а):
Ну защита от ф5 у меня в форме есть... Ща проверю...
Спустя 7 минут, 8 секунд (14.08.2011 - 12:32) killer8080 написал(а):
да ещё не мешало бы после imagejpeg, установить права доступа. Файл будет создан од правами апача, обычно 755, тогда по ftp под правами юзера хостинга его нельзя будет удалить.
...
imagejpeg($dst_im, $file, 75);
chmod($file, 0775);
...
Спустя 4 минуты, 13 секунд (14.08.2011 - 12:36) cyberside написал(а):
хм, работает.. А когда вставляю к себе в форму, ошибка возвращается))
Спустя 1 минута, 57 секунд (14.08.2011 - 12:38) killer8080 написал(а):
какая ошибка?
Спустя 35 секунд (14.08.2011 - 12:38) cyberside написал(а):
Fatal error: Call to undefined function upload_image() .... on line 332
Спустя 8 минут, 52 секунды (14.08.2011 - 12:47) killer8080 написал(а):
значит функция не объявлена, ищи ошибку
Спустя 5 минут, 23 секунды (14.08.2011 - 12:53) cyberside написал(а):
Я изменил имя функции, все заработало
Спустя 10 минут, 24 секунды (14.08.2011 - 13:03) killer8080 написал(а):
cyberside
не забудь про права доступа к файлу
не забудь про права доступа к файлу