Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> PHP -> FAQ конференции RU.PHP


RU.PHP FAQ. Работа с файлами

  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

Оглавление FAQ

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.