Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

5. Работа с файлами

  1. Пытаюсь переслать картинку из файла, но она приходит частично, "бьется", что делать?
  2. Почему при работе с csv-файлами теряются некоторые заглавные русские буквы?
  3. При попытке отдать через header("Location: somefile") файл с расширением pdf, doc, txt, IE открывает их в окне браузера. Как этого избежать?
  4. Как заставить браузер предлагать сохранять файл с нужным названием, а не download.php?
  5. Как корректно заставить броузер скачать и записать файл вместо открытия в окне с поддержкой докачки? (пример скрипта)
  6. Как сделать аттачмент к е-мейлy пpи отпpавке его с помощью фyнкции mail?


  1.  Пытаюсь переслать картинку из файла, но она приходит частично, "бьется", что делать?
    Бинарные файлы нужно открывать с ключем "b", иначе в некоторых случаях файл считается текстовым. Обычно такое происходит под Windows, но если в Вашей системе параметр "b" не требуется, то он будет игнорироваться, поэтому рекомендуется его все-таки употреблять. Пример:
    <?
      $fp 
    fopen("/home/rasmus/file.txt""rb");
    ?>

    Andy Ice, 2:5012/8.13

  2.  Почему при работе с csv-файлами теряются некоторые заглавные русские буквы?
    Потому что csv-файл должен удовлетворять одному, главному условию: текстовые поля должны быть ограничены кавычками, т.е. пример такого плана:

    1, "Фамилия Имя Отчество", "Должность"

    Andy Ice, 2:5012/8.13

  3.  При попытке отдать через header("Location: somefile") файл с расширением pdf, doc, txt, IE открывает их в окне браузера. Как этого избежать?
    При отдаче файла через header("Location: somefile"), web сервер отдает еще Content-type этого файла, который узнается по расширению файла. Информация о соответствии content-а расширению берется web сервером из конфигурационного файла mime.types. Броузеры в зависимости от получаемого Content-type знают что дальше делать с этим файлом. При этом расширение файла броузеру ни о чем не говорит, и если web сервер отдаст, к примеру, файл best_music.mp3 с Content-type: application/msword, то, если в системе клиента установлен MS Word, этот файл будет открыт им.
    Для решения проблемы описанной в вопросе существуют два способа:

    1. Отредактировать файл mime.types поставив желаемым расширениям файлов (которые надо скачивать, а не открывать) в соответствие тип application/octet-stream.
    Hедостатки:
    - этот путь годится, если Вы яляетесь администратором сервера;
    - изменения коснутся всех файлов, тип которых Вы переопределили, даже тех, которые HАДО открывать в броузере.

    2. Отдавать файл клиенту, не посредством header("Location: somefile"), а организовав собственную процедуру отдачи файла. При этом появляется возможность динамически менять Content-type, предоставив пользователю выбор, открыть ли файл в броузере или просто скачать, записав на диск.
    Hедостатки:
    - бОльшая нагрузка на сервер;
    - бОльшие требования к объему RAM на сервере.
    Serge V. Tarasov

  4.  Как заставить браузер предлагать сохранять файл с нужным названием, а не download.php?
    В msdn нашел:

    <? 
        header
    ("Content-Disposition: attachment; filename=work1.doc"); 
        
    $x fread(fopen("test.doc""rb"), filesize("test.doc")); 
        echo 
    $x
    ?>


    Alexey Kolesnichenko

  5.  Как корректно заставить броузер скачать и записать файл вместо открытия в окне с поддержкой докачки? (пример скрипта)
    Предполагается, что
    $cd - путь к файлу,
    $fn - имя файла

    <?php
    $filename 
    $cd."/".$fn;
    if (!
    file_exists($filename))
       {
        
    header ("HTTP/1.0 404 Not Found");
        exit;
       }
    $fsize filesize($filename);
    $ftime date("D, d M Y H:i:s T"filemtime($filename));
    $fd = @fopen($filename"rb");
    if (!
    $fd){
      
    header ("HTTP/1.0 403 Forbidden");
      exit;
    }
    // Если запрашивающий агент поддерживает докачку
    if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {
      
    $range $HTTP_SERVER_VARS["HTTP_RANGE"];
      
    $range str_replace("bytes="""$range);
      
    $range str_replace("-"""$range);
      if (
    $range) {fseek($fd$range);}
    }
    $content fread($fdfilesize($filename));
    fclose($fd);
    if (
    $range) {
      
    header("HTTP/1.1 206 Partial Content");
    }
    else {
      
    header("HTTP/1.1 200 OK");
    }
    header("Content-Disposition: attachment; filename=$fn");
    header("Last-Modified: $ftime");
    header("Accept-Ranges: bytes");
    header("Content-Length: ".($fsize-$range));
    header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
    header("Content-type: application/octet-stream");
    print 
    $content;
    exit;

    ?>


    Serge V. Tarasov

  6.  Как сделать аттачмент к е-мейлy пpи отпpавке его с помощью фyнкции mail?
    <?
    function XMail$from$to$subj$text$filename)
    {
    $f         fopen($filename,"rb");
    $un        strtoupper(uniqid(time()));
    $head      "From: $from\n";
    $head     .= "To: $to\n";
    $head     .= "Subject: $subj\n";
    $head     .= "X-Mailer: PHPMail Tool\n";
    $head     .= "Reply-To: $from\n";
    $head     .= "Mime-Version: 1.0\n";
    $head     .= "Content-Type:multipart/mixed;";
    $head     .= "boundary=\"----------".$un."\"\n\n";
    $zag       "------------".$un."\nContent-Type:text/html;\n";
    $zag      .= "Content-Transfer-Encoding: 8bit\n\n$text\n\n";
    $zag      .= "------------".$un."\n";
    $zag      .= "Content-Type: application/octet-stream;";
    $zag      .= "name=\"".basename($filename)."\"\n";
    $zag      .= "Content-Transfer-Encoding:base64\n";
    $zag      .= "Content-Disposition:attachment;";
    $zag      .= "filename=\"".basename($filename)."\"\n\n";
    $zag      .= chunk_split(base64_encode(fread($f,filesize($filename))))."\n";

    if (!@
    mail("$to""$subj"$zag$head))
     return 
    0;
    else
     return 
    1;
    }
    ?>


    Eugene Belyaev, 2:469/83.210


[ Оглавление ]









helloworld.ru © 2001-2021
Все права защищены