За последние 24 часа нас посетил 56561 программист и 7332 робота. Сейчас ищут 1918 программистов ...

При скачивании файла его надо на лету отредактировать и отдать тому, кто скачивает. Как?

Тема в разделе "PHP для новичков", создана пользователем kaurych, 13 авг 2018.

  1. kaurych

    kaurych Активный пользователь

    С нами с:
    7 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    @mkramer да фиг знает, что не комментируй всё равно скачивает.
    Код прокси как основа от которой отталкивался взят отсель:
    https://gist.github.com/codedokode/ea0503ecb0efbc385b24f3972b774976
    Заранее предупреждаю я меньше недели в сумме как программист php ;)
    PHP:
    1. <?php
    2. //тут раскладывается ссылка на домен и запрос:
    3. $stderr = fopen('php://stderr', 'w');
    4.  
    5. $url = $_SERVER['REQUEST_URI'];
    6. $path = parse_url($url, PHP_URL_PATH);
    7. $query = parse_url($url, PHP_URL_QUERY);
    8.  
    9. $newPath = ltrim($path, '/');
    10. if ($query) {
    11.     $newPath .= '?' . $query;
    12. }
    13.  
    14. function multiexplode ($delimiters,$string) {
    15.  
    16.     $ready = str_replace($delimiters, $delimiters[0], $string);
    17.     $launch = explode($delimiters[0], $ready);
    18.     return  $launch;
    19. }
    20. /*из запроса берутся параметры и отдельно обрабатываются,
    21. конечный результат этой обработки это добавление новых данных к
    22. тем данным которые берутся при скачивании файлика, смотрите чуть ниже:
    23. ....
    24. Смысла эту обработку приводить не вижу никакого! */
    25. //  тут из запроса формируется запрос в целях
    26. //проксирования на другой сервер с которого на
    27. //самом деле скачивается тот самый файлик!
    28. $base = 'http://192.168.25.150:8888';
    29. //print_r($proxyUrl = $base . $yes_pxr . '?' . $Squery); //Вывод конечной ссылки для отладки
    30. $proxyUrl = $base . $yes_pxr . '?' . $Squery;
    31. //$proxyURL - это ссылка для запроса на проксируемый сервер
    32. // $context = stream_context_create();
    33. //print_r($contents = @file_get_contents($proxyUrl /* , false, $context */));
    34. $contents = @file_get_contents($proxyUrl /* , false, $context */);
    35. // Получаем заголовки ответа из глобальной переменной (PHP!)
    36. $headers = $http_response_header;
    37. $name_channel = stripcslashes ($name_channel);
    38. // $name_channel это имя скачиваемого фаайла.. подмена отрабатывает на ура
    39. header('Content-Disposition: attachment; filename="' . $name_channel . '"');
    40.  
    41. $firstLine = $headers[0];
    42.  
    43. if ($contents === false) {
    44.     fwrite($stderr, "Request failed: $proxyUrl - $firstLine\n");
    45.     header("HTTP/1.1 503 Proxy error");
    46.     die("Proxy failed to get contents at $proxyUrl");
    47. }
    48.  
    49. fwrite($stderr, "$proxyUrl - OK: $firstLine\n");
    50.  
    51. $allowedHeaders = "!^(http/1.1|server:|content-type:|last-modified|access-control-allow-origin|Content-Length:|Accept-Ranges:|Date:|Via:|Connection:|X-|age|cache-control|vary)!i";
    52.  
    53. // Прокидываем разрешенные заголовки
    54. foreach ($headers as $header) {
    55.  
    56.     if (preg_match($allowedHeaders, $header)) {
    57.         fwrite($stderr, "+ $header\n");
    58.         header($header);
    59.     } else {
    60.         fwrite($stderr, "- $header\n");
    61.     }
    62. }
    63.  
    64. #echo $contents_end;
    65.  
    66. ?>
    --- Добавлено ---
    Вот в самом низу перед закрытием кода есть;
    #echo $contents_end;
    в этой переменной в итоге те самые данные которые надо засунуть в файлик с именем
    $name_channel
    в место тех данных которые были считаны и остаются в файлике скачиваемом с проксируемого сервера!
     
    #26 kaurych, 14 авг 2018
    Последнее редактирование модератором: 14 авг 2018
  2. kaurych

    kaurych Активный пользователь

    С нами с:
    7 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    ну ЁМАЁ.... оказывается всё работает.
    Вчера чистил кэш браузера не посмотрел, по видимому за последний час только.
    На данный момент тотально всё вычистил и забегало...
    Но вот с какого перепугу вдруг и в Мозилле заработало не понимаю, файлик как ни крути пустой был
    --- Добавлено ---
    Тут другая фигня выскакивает, не все строчки файлика попадают в массив... в место 10ти только 8мь.
    Две последнии странно себя ведут, предпоследняя на половину, а последняя в обще пропадает!
    Подозреваю, что тут что-то не так;
    $massiv=explode("\n", $contents);
    Т.е. по переносу строк в массив заносится... что не так, как правильно лучше сделать что бы без косяков было?
     
  3. kaurych

    kaurych Активный пользователь

    С нами с:
    7 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    Так тоже не хочет... последнии срочки урезаны..
    $massiv=explode(PHP_EOL, $contents);
     
  4. kaurych

    kaurych Активный пользователь

    С нами с:
    7 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    Такое подозрение, что не влезает в свежеобъявленный массив весь объём данных!
    Текста хватает. Что делать, в каждой ячейке по длинной строке. Может как-то заранее объявлять размер массива надо?
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    бедняга ты
    --- Добавлено ---
    вот тут у тебя происходит получение контента, который ты хочешь поменять
    PHP:
    1. $contents = @file_get_contents($proxyUrl /* , false, $context */);
    дальнейшая его судьба покрыта тайной, ибо больше с этой переменной не происходит ничего.
    реши этот вопрос
     
  6. kaurych

    kaurych Активный пользователь

    С нами с:
    7 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    на самом деле вот чего дальше с ней;
    Код (Text):
    1. $mas_you = explode (PHP_EOL, $contents);
    изначально с $contents всё good, 10 строк, но в массив попадает 8 с половиной!
    Знакомый спец в php рекомендует рекомендует читать побайтово, пока не знаю как..
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    =)
    вы как слепые котята

    кароче, ты либо учи, либо плати
    если хочешь учить - читай код и понимай, что делает каждое слово.
    в приведённом тобою фрагменте ты не понимаешь конкретно третье.
     
  8. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
    вот вот... купи http://softtime.ru/php5/?id_article=117 и читай "побайтово"
     
  9. kaurych

    kaurych Активный пользователь

    С нами с:
    7 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    @igordata да я не против и учить и платить, было бы время на это :) - я же говорю меня озадачили как всегда неожиданно - 5ть лет назад учился: - ДЕЛАЙ!
    Вот, всё сделал оказывается ещё вчера, закончил по вашим подсказкам, но кэш не полностью вычистил, поэтому не знал, что работает.
    PHP_EOL символ конца строки, до этого я делал тоже самое, единственное разбивал текст из формата JSON с "\n", но тут не катит этот момент. По PHP_EOL работает но не понимаю почему последнии две строчки проглатывает, может сошлёшься что почитать, я только рад.
    Не большое по размеру содержимое массивы только так забирают, а тут перебор какой-то...:eek:
    --- Добавлено ---
    @Valick Спасибо, есть книга 5ти летней давности с курсов. Опыта нет поэтому обратился!
    У меня нет времени сидеть часами читать, я на ходу всё сделал за счёт в основном данных с сайта php.net
     
  10. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.907
    Симпатии:
    327
    дозвиданья :)
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    так загляни в эти две строчки и загляни в PHP_EOL, загляни в доку и подумай, что не так.
    кроме тебя этого не сделать никому
     
  12. kaurych

    kaurych Активный пользователь

    С нами с:
    7 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    #37 kaurych, 15 авг 2018
    Последнее редактирование модератором: 15 авг 2018
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    а в чем разница?
     
  14. kaurych

    kaurych Активный пользователь

    С нами с:
    7 авг 2018
    Сообщения:
    23
    Симпатии:
    0
    @igordata со слов Антона Гордеева: file_get_contents - немного обрезанный и унифицированный курл.
    В чём конкретно причина того,что file_get_contents не полностью построчно переносил данные в массив не знаю, вывод массива даже curl потом был обрезанный на пол строки и тут же строка ввода начиналась в консоли.