Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вывод результата после обработки защитного кода
 
 автор: Skiff   (18.01.2009 в 18:29)   письмо автору
 
 

Что я хочу:
пользователь вводит цифры с защитной картинки и жмёт кнопку,после чего просходит смена страницы и автоматически выводится окно диалога обработки файла.
*****
Сейчас всё работает но после ввода защитного кода ( если он правильный ) смены содержимого страницы не происходит!!!
Подскажите как сначала сменить содержимое страницы а потом направить файл пользователю???
Вот код

$sql_line="SELECT * FROM `$sql_tabl` WHERE id=$id";
  $res=mysql_query($sql_line)or die("БАЗА ДАННЫХ НЕДОСТУПНА <br />Нет такого файла");
  $out['{main}'].='<p> Информация о файле<p/>';
  while ($line = mysql_fetch_row($res))
             {


               $file_info['{ID}'].=$line[0];
               $file_info['{Name}'].=$line[1];
               $titlePlus=$line[1]."<br />";
               $file_info['{Info}'].=$line[2];
               $file_info['{Size}'].=$line[3];
               $file_info['{Link}'].="/download/catalog/".$sql_tabl."/".$line[4];
               $file_name=$line[4];
               $file_link="catalog/".$sql_tabl."/".$line[4];
               $file_info['{linkPic}'].="/download/catalog/fileimg/".$line[5];
               $file_info['{Date}'].=$line[6];
               $file_info['{NumDownload}'].=$line[7];
              }
              $templates['file_info']=file_get_contents($ini['dirTemplates'].'file_info.tpl');
           $out['{main}'].=strtr($templates['file_info'], $file_info);

    if (file_exists($file_link))

    {
        if (!empty($_POST['securityCode']))
       
        {

            if(strtolower($_POST['securityCode'])==$HTTP_SESSION_VARS['securityCode'] || strtolower($_POST['securityCode'])==$_SESSION['securityCode'])
            {


                         $out['{main}'].= '<font color="green">Защитный код верен!</font><br />';


                        

                          download_file($file_name,$file_link);




                        $id=$file_info['{ID}'];
                        //connect_SQL($sql_host,$sql_login,$sql_pass,$sql_db);
                        $num_update=$file_info['{NumDownload}']+1;
                        $sql_NumDownload="UPDATE $sql_tabl SET NumDownload ='$num_update'   WHERE id=$id";

                      

                   $sql_NumDownload_UPDATE= mysql_query($sql_NumDownload)or die("БАЗА ДАННЫХ НЕДОСТУПНА <br />NumDownload- неизменён");
             }
              else{
                   $out['{main}'].='<font color="red">Неверный защитный код!</font><br>';
                   $out['{main}'].=file_get_contents($ini['dirTemplates'].'cod.tpl');
                   }

     }


      else $out['{main}'].=file_get_contents($ini['dirTemplates'].'cod.tpl');

     }
     else
          {
           $out['{main}'].='<font color="red">ОШИБКА БАЗЫ ДАННЫХ<br />Нет такого файла</font><br>';

           //$subject='Ошибка базы данных '.$ini['sitename'];
           //$headers ='From:PostMaster@'.$_SERVER['SERVER_NAME'].br;
           //$headers.='MIME-Version: 1.0'.br;
           //$headers.='Content-type: text; charset=windows-1251'.br;
           //$body='Нет файла ; '.$file_info['{Link}'].'  Таблица '.$sql_tabl.'  ID '.$file_info['{ID}'];
           // mail('admin@******.ru', $subject, $body, $headers);
           }

Функция download_file($file_name,$file_link);

function download_file($file_name,$file_link)
         {
                      ob_end_clean();
           // ******** Вариант 1
                        // Задаём имя, которое будет предложено
                         // клиенту для сохранения файла
                         header("Content-Disposition: attachment; filename=".$file_name);
                         // В качестве типа файла задаём бинарный поток
                         header("Content-type: application/octet-stream");
                         // Отправляем клиенту размер страницы
                        // в HTTP-заголовке Content-length
                         header("Content-length: ".filesize($file_name));

                         // Отправляем содержимое файла
                         //sleep(3); // задержка 10 секунд
                         // echo file_get_contents($file_link);
                            //fpassthru(fopen($file_link, 'rb'));
                            echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$file_name'>";

          }

  Ответить  
 
 автор: egoss   (21.01.2009 в 16:44)   письмо автору
 
   для: Skiff   (18.01.2009 в 18:29)
 

Я думаю нужно после проверки кода, если он правильный, поставить в сессию пользователя флаг разрешающий скачивать файлы (также ID файла или его путь+имя), потом вывести страницу с любым нужным вам содержимым и ссылкой "скачать файл" и потом только (когда пользователь нажмет на ссылку для скачивания) вызывать функцию download_file предварительно проверив данные в сессии.

Вот пример работы второй страницы, после проверки кода.

<?php
if(!isset($_GET['id'])){
echo 
"
<center>Сейчас начнется скачивание файла, если этого не произошло нажмите на <a href =\"?id=152447\">ссылку</a></center>
<SCRIPT LANGAUGE=\"JAVASCRIPT 1.3
    TYPE=\"text/javascript\">
    <!--
    var URL = \"download.php?id=152447\"
    var speed = 4000
    function reload() {
    location = URL
    }
    setTimeout(\"reload()\", speed);
    //-->
    </script>
"
;
exit();
}

// Download
$filename="anime.mp3";
$filesize=filesize($filename);
$handle fopen($filename"r"); 
$contents fread($handlefilesize($filename)); 
fclose($handle);

header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$filename"); // имя файла которое будет показываться при скачивании
header("Content-type: audio/mpeg"); // миме тип файла, в данном случае для mp3
header("Accept-Ranges: bytes"); 
header("Content-Length: $filesize");// размер файла в байтах
print $contents;
?>


Повторяю ето только пример, для наглядности, без проверки сессии, но рабочий.

  Ответить  
 
 автор: Skiff   (27.01.2009 в 23:10)   письмо автору
 
   для: egoss   (21.01.2009 в 16:44)
 

Спасибо!
В таком ключе я не думал!

  Ответить  
 
 автор: Trianon   (28.01.2009 в 00:43)   письмо автору
 
   для: Skiff   (18.01.2009 в 18:29)
 

<?
                         
// Задаём имя, которое будет предложено
                         // клиенту для сохранения файла
                         
header("Content-Disposition: attachment; filename=".$file_name);
                         
// В качестве типа файла задаём бинарный поток
                         
header("Content-type: application/octet-stream");
                         
// Отправляем клиенту размер страницы
                        // в HTTP-заголовке Content-length
                         
header("Content-length: ".filesize($file_name));

                         
// Отправляем содержимое файла
                         //sleep(3); // задержка 10 секунд
                         // echo file_get_contents($file_link);
                            //fpassthru(fopen($file_link, 'rb'));
                            
echo "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=$file_name'>";

Это не корректно.

[поправлено модератором]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования