Всем добрый день! В этом коде жестко прописано, что можно загружать только файлы JPG (file_types : "*.jpg", ) Очень хочется расширить круг файлов. Не подскажите, как это правильно сделать? PHP: <? if( ! defined( 'rootpath' ) ) { die( "Hacking attempt!" ); } switch($case) { case 'title': include_once 'photo/class/includes.php'; unset($include); $include = new _includesPhoto(); /* Defines for photo mod */ $CREATING_THUMBNAIL_TXT = TXT('CREATING_THUMBNAIL'); $DOWNLOADING = TXT('DOWNLOADING'); $ABORT_UPLOAD = TXT('ABORT_UPLOAD'); $ALL_IMAGES_RECEIVED = TXT('ALL_IMAGES_RECEIVED'); $true_url = $config['http_script_dir'].'/modules/photo'; $downloadButtonStyle = downloadButtonStyle($true_url); /* Resize on clients side */ if ($photo['resize_on_client_side']) { $resize_on_client_side[0] = 'flash9_url : "'.$true_url.'/swfupload/swfupload_fp9.swf",'; $max = $sql->maxOrMin(array('table' => 'photo_size', 'select' => array('height_px')), 'MAX') * 1.2; // +20% $max = intval($max); $resize_on_client_side[1] = ', thumbnail_height: '.$max.', thumbnail_width: '.$max.', thumbnail_quality: 100'; $handlersResizeOnClientSide = '&resize_on_client_side=1'; } /* Header for photo mod */ $header[] = <<<HTML <link href="{$true_url}/css.css" rel="stylesheet" type="text/css" media="screen" /> <script type="text/javascript" src="{$true_url}/swfupload/swfupload.js"></script> <script type="text/javascript" src="{$true_url}/js/handlers.php?data=js{$handlersResizeOnClientSide}"></script> <script type="text/javascript"> <!-- text vars --> var CREATING_THUMBNAIL_TXT = '{$CREATING_THUMBNAIL_TXT}'; var DOWNLOADING = '{$DOWNLOADING}'; var ALL_IMAGES_RECEIVED = '{$ALL_IMAGES_RECEIVED}'; <!-- / text vars --> var default_type = '{$photo['photo_type']}'; var default_size = '{$photo['photo_size']}'; var can_i_leave = true; window.onbeforeunload = function () { if (can_i_leave == false) { return '{$ABORT_UPLOAD}'; } }; {$setcookies} var swfu; var uni = "{$session_id}"; var true_url = "{$true_url}"; var upload_url = "{$config['path_image_upload']}/photo"; window.onload = function () { swfu = new SWFUpload({ // Backend Settings upload_url: "{$true_url}/upload.php", post_params: {"PHPSESSID": "{$session_id}"}, // File Upload Settings file_size_limit : "{$photo['photo_max_size']} MB", file_types : "*.jpg", file_types_description : "JPG Images", file_upload_limit : "{$photo['photo_max_q']}", // Event Handler Settings - these functions as defined in Handlers.js // The handlers are not part of SWFUpload but are part of my website and control how // my website reacts to the SWFUpload events. // swfupload_load_failed_handler : loadFailed, swfupload_preload_handler : preLoad, file_queue_error_handler : fileQueueError, file_queued_handler : showAjaxBlock, file_dialog_complete_handler : fileDialogComplete, upload_progress_handler : uploadProgress, upload_error_handler : uploadError, upload_success_handler : uploadSuccess, upload_complete_handler : uploadComplete, // Button Settings {$downloadButtonStyle} button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT, button_cursor: SWFUpload.CURSOR.HAND, // Flash Settings flash_url : "{$true_url}/swfupload/swfupload.swf", {$resize_on_client_side[0]} custom_settings : { upload_target : "divFileProgressContainer"{$resize_on_client_side[1]} }, // Debug Settings debug: false }); }; </script> <script> jQuery(document).ready(function() { jQuery(".headOfTheSideBlock.dropdown").click(function() { var dropDownNextId = jQuery(this).attr('next'); var dropDownNext = jQuery('#'+dropDownNextId); if ( dropDownNext.css('display') == 'none') { dropDownNext.show('slide',{ direction: 'up' }, 1000); jQuery(this).removeClass('img'); jQuery(this).addClass('img2'); } else { dropDownNext.hide('slide',{ direction: 'up' }, 1000); jQuery(this).removeClass('img2'); jQuery(this).addClass('img'); } }); }); </script> <!-- highslide --> <script type="text/javascript" src="{$true_url}/js/highslide/highslide-with-html.js"></script> <link rel="stylesheet" type="text/css" href="{$true_url}/js/highslide/highslide.css" /> <script type="text/javascript"> hs.graphicsDir = '{$true_url}/js/highslide/graphics/'; hs.outlineType = 'rounded-white'; hs.wrapperClassName = 'draggable-header'; //hs.height = '500'; //hs.width = '415'; hs.cacheAjax = false; hs.preserveContent = false; </script> <!-- Jcrop --> <script src="{$true_url}/js/Jcrop/jquery.Jcrop.js"></script> <link rel="stylesheet" href="{$true_url}/js/Jcrop/jquery.Jcrop.css" type="text/css" /> HTML; unset($case); return; } include 'photo/encodedIoncube.php';
я сомневаюсь, что у кого то возникает чувство удовольствия от просмотра тонны кода. выкладывай ту часть, с которой проблема! а добавить несколько типов файлов - так же как ты добавил один. Если всё работает, то добавь аналогично .png и какие еще нужны...
Элемент кода вот PHP: // File Upload Settings file_size_limit : "{$photo['photo_max_size']} MB", file_types : "*.jpg", file_types_description : "JPG Images", file_upload_limit : "{$photo['photo_max_q']}", Просто мне не понятна грамматика написания, как это правильно сделать. Пробовал добавлять через запятую, двоеточие, но ничего не получается
PHP: if($_FILES['file']['type'] == "image/gif" || $_FILES['file']['type'] == "image/png" || $_FILES['file']['type'] == "image/jpg" || $_FILES['file']['type'] == "image/jpeg") { /* файл нам подходит. обрабатываем */ } else { /* пользователь послан на... :) */ } вот так можно... --- Добавлено --- 'file' - это значение атрибута name="file" в форме! думаю понятно, но на всякий случай...
это проверяет, доходит ли нам тип файла. в это нужно завернуть обработку файла и, если у тебя еще есть какие то условия, то вложить их в это. Это скорее альтернативное решение, а не поправка к твоему.
PHP: <?php // До этого скрипта ты должен задать переменную $UserId. и $_FILES['file'] - это значение атрибута name="file" в форме. if( $_FILES['file']['type'] == "image/gif" || $_FILES['file']['type'] == "image/png" || $_FILES['file']['type'] == "image/jpg" ) { // если файл нам подходит $fileName = $UserId."id_foto_"; // начинаем формирование конечного имени файла $orignName = $_FILES['uploadfile']['name']; // сохраняем в переменну оригинальное имя файла $x = preg_match( "/png$/", $orignName ); // расширение файла png ? $y = preg_match( "/jpg$/", $orignName ); // расширение файла jpg ? $z = preg_match( "/gif$/", $orignName ); // расширение файла gif ? if ( $x == 1 OR $y == 1 OR $z == 1 ) { if ( $x == 1 ) { $rassh = ".png"; } // определяем if ( $y == 1 ) { $rassh = ".jpg"; } // расширение if ( $z == 1 ) { $rassh = ".gif"; } // файла $i = 0; // счетчик a: // метка для goto $tmp = "files/$fileName".$i.$rassh; // формируем путь по которому файл с таким именем возможно уже существует. $R = file_exists($tmp); // проверяем, существует ли файл с таким именем if ( $R == 1 ) { $i++; goto a; } // если существует, то увеличиваем счетчик на 1 и отправляемся к метке для goto $fileName = $fileName.$i.$rassh; // имя файла сфомированно $uploaddir = './files/'; // относительный путь к конечной папке $uploadfile = $uploaddir.basename($fileName); // copy($_FILES['uploadfile']['tmp_name'], $uploadfile); // копируем файл в нужный нам каталог // файлы будут сохраняться с именами типа 45id_foto_0.jpg, 45id_foto_1.jpg, 45id_foto_2.jpg и т д // 45 - id пользователя для примера 0, 1, 2 - счетчик если у пользователя несколько файлов одного типа. } } ?>
Огромное спасибо! Но прошу прощения за тупость. Я не смогу создать переменную ибо не хватает мозгов. Если это надо сделать прямо в этом модуле, но можешь скинуть его целиком, как он должен быть? --- Добавлено --- Разобрались! Человек подсказал, все оказывается гораздо проще. Необходимо прописать file_types : "*.jpg; *.png; *.jpeg; *.gif" И все заработало! Всем огромное спасибо!
Разобрались! Человек подсказал, все оказывается гораздо проще. Необходимо прописать file_types : "*.jpg; *.png; *.jpeg; *.gif" И все заработало! Всем огромное спасибо!
Это тебе подсказали про проверку на клиенте, а точнее, настройки параметров диалогового окна, и к php это имеет малое отношение. А здесь тебе пытались подсказать, как сделать проверку на сервере, поскольку тебе могут ложную инфу прислать намеренно и не через твою красивую формочку. Поэтому все проверки на клиенте обязательно дублируются на сервере.
@TeslaFeo, не отношу себя к ярым противникам goto, но использовать его так: это трындец. Тут как раз пример использования цикла do-while, который все сюда приходящие нубы используют совсем не для тех задач PHP: $i = 0; do { $tmp = "files/${fileName}$i.$rassh"; $i++; } while (file_exists($tmp));