1. Всем пользователям необходимо проверить работоспособность своего электронного почтового адреса. Для этого на, указанный в вашем профиле электронный адрес, в период с 14 по 18 июня, отправлено письмо. Вам необходимо проверить свою почту, возможно папку "спам". Если там есть письмо от нас, то можете не беспокоиться, в противном случае необходимо либо изменить адрес электронной почты в настройках профиля , либо если у вас электронная почта от компании "Интерсвязь" (@is74.ru) вы им долго не пользовались и хотите им пользоваться, позвоните в СТП по телефону 247-9-555 для активации вашего адреса электронной почты.
    Скрыть объявление

Кодинг на PHP

Тема в разделе "Вебстроительство", создана пользователем ansis, 13 июн 2006.

  1. ansis

    ansis

    Репутация:
    695
    ansis, 13 июн 2006
    Эта тема предназначена для обсуждения и решения любых проблем, связанных с программированием на языке скриптов PHP, обмена секретами, опытом и помощи другим пользователям.
     
    #1
  2. Mozzart

    Mozzart

    Репутация:
    50
    Mozzart, 25 авг 2010
    PHP:
    function array_msort($array$cols)
        {
        
    $colarr = array();
        foreach (
    $cols as $col => $order) {
            
    $colarr[$col] = array();
            foreach (
    $array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); }
        }
        
    $params = array();
        foreach (
    $cols as $col => $order) {
            
    $params[] =& $colarr[$col];
            
    $params array_merge($params, (array)$order);
        }
        
    call_user_func_array('array_multisort'$params);
        
    $ret = array();
        
    $keys = array();
        
    $first true;
        foreach (
    $colarr as $col => $arr) {
            foreach (
    $arr as $k => $v) {
                if (
    $first) { $keys[$k] = substr($k,1); }
                
    $k $keys[$k];
                if (!isset(
    $ret[$k])) $ret[$k] = $array[$k];
                
    $ret[$k][$col] = $array[$k][$col];
            }
            
    $first false;
        }
        return 
    $ret;

    }
     
  3. slui

    slui

    Репутация:
    7.109
    slui, 26 авг 2010
    Итератор те в помощь...
    http://php.net/manual/en/class.directoryiterator.php
    И будет всё просто и непринужденно... И ненадо никаких рекурсий, как тут кто-то советовал...
     
  4. sinisha

    sinisha Ословед

    Репутация:
    1.130
    sinisha, 26 авг 2010
    Вы вообще понимаете, зачем нужна рекурсия?
     
  5. slui

    slui

    Репутация:
    7.109
    slui, 26 авг 2010
    Я это уже понимал 5 лет назад... Или 7 лет назад, уже не помню=) И с успехом использовал...
    А так-же классы, статические методы, синглтон-вызов, ленивая загрузка, паттерны проектирования...
    Вот только здесь рекурсия ЯВНО ненужна... Она целесообразна при построении дерева на С, но абсолютно бесмысленно ее использовать на PHP... Нет, можно конечно, но зачем??? Когда достаточно создать ОДИН раз итератор, и форитчем по нему пробежаться... Он сам пройдет по всем вложеным папкам/файлам и выдаст всё готовое...

    Встречный вопрос: Вы понимаете что такое итератор? Я там линк дал на доку, почитайте на досуге...
    З.Ы.
    Задача решается тремя строками кода, пример:
    PHP:
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
    foreach(
    $objects as $name => $object)
        echo 
    "$name\n";
    Этот пример выведет всё, что есть в указанной папке и ВСЕХ подпапках...
    И не надо никаких рекурсий использовать...

    И что-бы получить нужные файлики, достаточно добавить preg_match=) Всё!!! Задача на два плевка... А размусолили... Интересно, сколько бы понадобилось времени, что-бы написать функцию, которая бы в качестве параметра принимала путь, в случае если нашлась подпапка, вызывала-б сама себя с этой подпапкой в качестве параметра и с условием для выхода, а так же анализа найденых файлов на соответствие...
     
  6. TRISTAN

    TRISTAN

    Репутация:
    31
    TRISTAN, 27 авг 2010
    Привет всем. У меня тут вопрос. Как отследить процесс загрузку временного файла на диск??
    То есть имеется форма:
    PHP:
    <form action="upload.php" method="post" enctype='multipart/form-data'>
            <
    input type="file" name="UploadFile" size="30">
            <
    input type="submit" value=Загрузить name="UploadButton">
        </
    form>
    Например есть ограничения на размер файл 2 метра. Выбираем файл размеров 2 гига и нажимаем на кнопку загрузить ... происходит загрузка файла(как временного), то есть мне нужно отследить размер этого файла и как тока он превысит 2 метра прекратить его загрузку ...
     
  7. slui

    slui

    Репутация:
    7.109
    slui, 27 авг 2010
    PHP:
    ini_set('upload_max_filesize''2M');
     
  8. TRISTAN

    TRISTAN

    Репутация:
    31
    TRISTAN, 28 авг 2010
    Чет мне не помогло ... я решил дальше пойти изменил этот парметр в php.ini в ручную но ничего не изменилось ... Процесс загрузки не прекращается ...то есть будет файл 100гигов вот и будет он 100 гигов загружать, а после выведет ошибку.

    ну либо можно ли узнать размер файла до его загрузки и помещения этого файла во временные. Кстати на этом форуме это как то делается.
     
  9. slui

    slui

    Репутация:
    7.109
    slui, 28 авг 2010
    Есть два пути...
    1. Прописать настройку в апач(я тебе для пхп показал)
    2. Реализовать загрузку файлов на сервер через SWFUpload, он не только размер перед загрузкой может посмотреть, но и фото сжать если надо на стороне клиента(что-бы сервер не нагружать)

    З.Ы.
    Здесь на форуме используется флеш-загрузчик. То есть второй вариант из описанного мной.
    Если у тебя флеш отключен(как у меня), то и здесь, на форуме, будет сначала файл загружаться полностью(все 100Гб), а потом только выдаст сообщение о слишком большом размере.
     
  10. BlackHawk

    BlackHawk

    Репутация:
    3.099
    BlackHawk, 28 авг 2010
    Попробуйте урезать post_max_size
    а смысл? если юзер хочет обойти ограничение, он может послать POST напрямую скрипту, без участия флешки и браузера. А если это для "честных" юзеров ограничение, то можно обойтись тегом
    HTML:
    <input type="hidden" name="MAX_FILE_SIZE" value="размер в байтах" />
     
  11. slui

    slui

    Репутация:
    7.109
    slui, 29 авг 2010
    Читай выше о чем идет речь, и что я отвечал...;) А то как-то не в тему получилось...
    Смысл в том, что-бы проверить ДО отправки размер... А для случаев как ты выразился "Нечестных" прочти мой пост под номером 1506 ;)
     
  12. Druid_Nikola

    Druid_Nikola Ословед

    Репутация:
    569
    Druid_Nikola, 29 авг 2010
    Может стоит взглянуть в сторону загрузчиков файлов на Silverlight? Есть готовые решения, как платные так и бесплатные.
     
  13. slui

    slui

    Репутация:
    7.109
    slui, 29 авг 2010
    Зачем? Когда есть SWFUploader??? 0_0
     
  14. TRISTAN

    TRISTAN

    Репутация:
    31
    TRISTAN, 29 авг 2010
    Я не знаю что это, надо гуглить ...

    Я хотел реализовать в двух вариантах один php+html, а другой через флеш ... так что потом попробую

    Попробуйте урезать post_max_size

    ничего не дало (я изменял его в файла php\php.ini и apache\bin\php.ini) он влияет тока на выполнения move_uploaded_file ...(то есть после получения временного файла)

    А вообще вот стоит ли заморачиваться над этим(на счет проверки размера временного файла)... может ли это повлиять на работу сервера???
    +
    А можно ли так сделать: узнать место размещения временного файла и в цикле проверять его размер????
    тока я не знаю где он находиться?? и где цикл то писать? (просто как я понял то при нажатии кнопку загрузить, php файл выполняется тока ПОСЛЕ полной загрузке временно файла)
    +
    Хотелось бы узнать ваше мнение по поводу коду ... удовлетворяет ли он требованиям безопасности ...
    HTML:
    <form action="upload.php" method="post" enctype='multipart/form-data'>
               <input type="hidden" name="MAX_FILE_SIZE" value="300000">
            <input type="file" name="UploadFile" size="30">
            <input type="submit" value=Загрузить name="UploadButton">
        </form>
    
    PHP:
    <?php  
        
    if(isset($_POST['UploadButton'])){
            
    $ErrorMsg Check($_FILES);
            if (
    $ErrorMsg){
                echo 
    "$ErrorMsg";
            }else {
                
    $UploadDir 'UploadFiles\\';
                
    $UploadFile =     $UploadDir.basename ($_FILES['UploadFile']['name']);
                if(
    move_uploaded_file($_FILES['UploadFile']['tmp_name'], $UploadFile))
                    echo 
    'Файл был успешно загружен.';
                else
                    echo 
    'Ошибка загрузки файла.';
            }
        }else{
            echo 
    'Ошибка загрузки файла. Повторите действие.';
        }
        echo 
    "<br/><a href=index.php>Вернуться к отправке</a>";
        function 
    Check($_FILES){
            if(!
    $_FILES['UploadFile']['name'])
                return  
    "Имя файла не введено.";
            if(
    $_FILES['UploadFile']['size']>1024*300)
                return 
    "Размер файла превышает 300 кб.";
            
    $FileName $_FILES['UploadFile']['tmp_name'];
            
    $size GetImageSize($FileName);
            if(!
    in_array($_FILES['UploadFile']['type'], array('image/jpeg''image/png''image/gif','image/jpeg'))  and (!$size))
                return 
    'Ошибка: Недопустимое расширение. Допускается:.png,.jpeg,.gif';
            if(!
    is_uploaded_file($_FILES['UploadFile']['tmp_name'])) 
                return 
    "Ошибка загрузки файла на сервер";
            return;
        }        
        
    ?>

    PS Спасибо за внимание.
     
  15. slui

    slui

    Репутация:
    7.109
    slui, 30 авг 2010
    Процес обращения к серверу происходит так:
    Браузер отправляет серверу POST-данные в виде пост-запроса + файл, Апач, после ПОЛНОГО принятия данных запускает скрипт, к которому обращаются, но никак не раньше...
    Так что не выдумывай, делай просто форму и всё=) Зачем проверять ДО отправки? Не вижу смысла... Это пользователя проблемы, если он большой файл отправляет...
     
  16. DeArtty

    DeArtty Ословед

    Репутация:
    106
    DeArtty, 10 сен 2010
    Помогите пожалуйста, сделал скачивание файла через виртуальную ссылку с разделением доступа для пользователей, проблема состоит в том что выгрузить весь файла в память не получится(readfile), файлы весят по 1-2Гб, памяти всего 128М, читать по строкам тож бессмысленно(fgets), потому что кнопка скачать в браузере появится только тогда когда файл весь выгрузится.

    На ifolder.ru реализовано ведь как то, я там выкачивал файлы по 1Г
     
  17. Serge

    Serge Ословед

    Репутация:
    13.474.289
    Serge, 10 сен 2010
    подгружай в память и отдавай файл кусочками. про кнопку не понял.
     
  18. DeArtty

    DeArtty Ословед

    Репутация:
    106
    DeArtty, 10 сен 2010
    Напишите пример пожалуйста

    Проблемка еще в том что все файлы находятся на ftp сервере, работать с ними получается ток по ссылке 'ftp://'.$ftp_user.':'.$ftp_pass.'@'.$ftp_server.$file;
     
  19. Serge

    Serge Ословед

    Репутация:
    13.474.289
    Serge, 10 сен 2010
    например так
    PHP:
    <?php
    $realpath 
    "/some/absolute/path.exe";
    $mtime = ($mtime filemtime($realpath)) ? $mtime gmtime();
    $size intval(sprintf("%u"filesize($realpath)));
    // Maybe the problem is we are running into PHPs own memory limit, so:
    if (intval($size 1) > return_bytes(ini_get('memory_limit')) && intval($size 1.5) <= 1073741824) { //Not higher than 1GB
      
    ini_set('memory_limit'intval($size 1.5));
    }
    // Maybe the problem is Apache is trying to compress the output, so:
    @apache_setenv('no-gzip'1);
    @
    ini_set('zlib.output_compression'0);
    // Maybe the client doesn't know what to do with the output so send a bunch of these headers:
    header("Content-type: application/force-download");
    header('Content-Type: application/octet-stream');
    if (
    strstr($_SERVER["HTTP_USER_AGENT"], "MSIE") != false) {
      
    header("Content-Disposition: attachment; filename=" urlencode(basename($F['FILE']['file_path'])) . '; modification-date="' date('r'$mtime) . '";');
    } else {
      
    header("Content-Disposition: attachment; filename=\"" basename($F['FILE']['file_path']) . '"; modification-date="' date('r'$mtime) . '";');
    }
    // Set the length so the browser can set the download timers
    header("Content-Length: " $size);
    // If it's a large file we don't want the script to timeout, so:
    set_time_limit(300);
    // If it's a large file, readfile might not be able to do it in one go, so:
    $chunksize * (1024 1024); // how many bytes per chunk
    if ($size $chunksize) {
      
    $handle fopen($realpath'rb');
      
    $buffer '';
      while (!
    feof($handle)) {
        
    $buffer fread($handle$chunksize);
        echo 
    $buffer;
        
    ob_flush();
        
    flush();
      }
      
    fclose($handle);
    } else {
      
    readfile($realpath);
    }
    // Exit successfully. We could just let the script exit
    // normally at the bottom of the page, but then blank lines
    // after the close of the script code would potentially cause
    // problems after the file download.
    exit;
    ?>
    не мое
     
  20. DeArtty

    DeArtty Ословед

    Репутация:
    106
    DeArtty, 21 сен 2010
    а не подскажите как реализовать докачку к етому скрипту, пробовал сам но чет видимо у меня не так, т.к. файл стал снова доходить до размера оперативной памяти сервера
     
  21. Воеводин Андрей

    Воеводин Андрей Ословед

    Репутация:
    671
    Воеводин Андрей, 29 сен 2010
    PHP:
    $query "UPDATE user SET `ruo`='$ruo'.`gorod`='$gorod'.`sch`='$sch'.`name`='$name'.`author1`='$author1'.`kl1`='$kl1'.`author2`='$author2'.`kl2`='$kl2'.`rukv`='$rukv'.`konc`='$konc' WHERE id=$id";

    Привет всем:) В чем ошибка? Не могу понять как сделать обновление сразу нескольких столбцов. Помогите пожалуйста:)
     
Загрузка...