[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Что значит скачивается но не сохраняется? Если она скачивается, то это уже подразумевает то, что она имеет какое-то представление в локальной файловой системе...
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?
    $filename 'http://pashkela.narod.ru/rectool.jpg';

        @
    header('Content-Disposition: attachment; filename="'.$filename.'"'); 
        @
    header('Content-Type: application/x-force-download; name="'.$filename.'"'); 

         
    readfile($filename);
    ?>
    Все нормально, выскакивает диалоговое на сохранение файла, можно сохранить или отказаться
     
  3. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    557
    Likes Received:
    306
    Reputations:
    27
    Скоре всего у него какие траблы с браузером, в ослике по моему есть такая трабла с Content-Disposition.
     
  4. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Pashkela, в хидерах имя файла должно быть, а не его урл
     
  5. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Кусок кода с моего движка:

    PHP:
      header("Content-Disposition: attachment; filename=\"" .$filename."\"" );
      
    header("Content-Description: File Transfer");
      
    header("Content-Type: application/download");
      
    header("Content-Length: " filesize($file));
      
    $fp fopen($file"r");
      while (!
    feof($fp))
        {
          echo 
    fread($fp65536);
          
    flush();
        }
      
    fclose($fp);
    Пробуй
     
    1 person likes this.
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    а я наверное должен был об этом догадаться по выложенному коду:)
     
  7. OnArs

    OnArs Banned

    Joined:
    1 Aug 2008
    Messages:
    211
    Likes Received:
    13
    Reputations:
    1
    Всем доброй ночи, появился вот так вопрос:

    Есть число, к примеру: 1450000
    Нужно выводить его в виде: 1'450'000

    Как это сделать?

    P.s. Есть идея перебирать строку с конца и каждый три символа вставлять нужный знак, в данном случае это ', но как правильно это реализовать не могу сообразить.

    Всем кто поможет - Заранее благодарен, с меня + :)

    Решил вот так:

    PHP:
    $cost '1450000';
    $cost strrev($cost);
    for (
    $i=0;$i<=strlen($cost);$i++) if (($i == 0) and ($i != 0)){ $scost .= '\''.$cost[$i];} else {$scost .= $cost[$i];};
    $cost strrev($scost);
    echo 
    $cost;
     
    #7427 OnArs, 12 Jan 2009
    Last edited: 12 Jan 2009
  8. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    http://ru2.php.net/number-format
     
  9. preda1or

    preda1or Member

    Joined:
    27 Oct 2008
    Messages:
    167
    Likes Received:
    96
    Reputations:
    6
    OnArs
    number_format($number, 0, '.', ',');
    $number - число
    0 - кол-во знаков после запятой (для округления)
    . - разделитель целой и дробной части
    , - разделитель "триад" или как там их)
     
    #7429 preda1or, 12 Jan 2009
    Last edited: 12 Jan 2009
  10. mad_dog

    mad_dog New Member

    Joined:
    23 Dec 2008
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    так а кто может обучить Чайника!?
     
  11. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5
    AkyHa_MaTaTa

    Pashkela

    groundhog

    Проблема заключается в том что после скачевания файла он не открывается пишит (невозможно посмотреть) В чём трабла???

    PHP:
    <?php 
    if(!empty($_GET['file'])){ 
        
    $filename basename($_GET['file']); 

        @
    header('Content-Disposition: attachment; filename="'.$filename.'"'); 
        @
    header('Content-Type: application/x-force-download; name="'.$filename.'"'); 

         
    readfile($filename); 

    ?> 
     
  12. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Посмотри содержимое файла в блокноте, наверняка там какой-то не регулярный контент... В смысле, того файла, который тебе отдаёт скрипт... Скрипт хоть в одной папке с файлами лежит?
     
  13. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5
    Нет не в одной! вот скрипт:
    PHP:
    <?php include("db.php");
    if (isset(
    $_POST['vibor'])) { $vibor $_POST['vibor'];}
    if (isset(
    $_POST['load'])) { $adres $_POST['load'];}
    $result1 mysql_query("SELECT * FROM data WHERE id='$vibor'",$db);
    if (!
    $result1)
    {
    exit(
    mysql_error());
    }
    if (
    mysql_num_rows($result1) > 0)
    {
    $myrow1 mysql_fetch_array($result1);
    $mas getimagesize($adres);

    $width 215;
    $heigth $mas[1]+270;
    $adres1 "admin/".$myrow1['url'];
    $im imagecreatetruecolor($width$heigth);

    $im1 imagecreatefromjpeg($adres);
    $im2 imagecreatefromjpeg('logo.jpg');
    $im3 imagecreatefromjpeg($adres1);
    $i=1;
    $name "avat".$i++.$myrow1['name'];
    imagecopy($im$im20$mas[1], 0021520);
    imagecopy($im$im10000215$mas[1]);
    imagecopy($im$im30$mas[1]+2000215350);

    //размеры аватарки
        
    $width imagesx($im);
        
    $height imagesy($im);
    //добавляем уголки
    $tl imagecreatefrompng('tl.png'); //top left
    $tr imagecreatefrompng('tr.png'); //top right
    $dl imagecreatefrompng('dl.png'); //down left
    $dr imagecreatefrompng('dr.png'); //down  right
    //размеры уголков (предпологается, что размер углов одинаковый )
        
    $w imagesx($tl);
        
    $h imagesy($tl);
    imagecopy($im$tl0000$w$h);
    imagecopy($im$tr$width-$w000$w$h);
    imagecopy($im$dl0$height-$h00$w$h);
    imagecopy($im$dr$width-$w$height-$h00$w$h);

    imagejpeg($im,"avatar/$name");
    imagedestroy($im);
    }
    else
    {
    exit();
    }

    printf("<a href='get.php?file=avatar/$name'><img src='avatar/$name' alt=''/></a>");
    ?>
    PHP:
    <?php
    if(!empty($_GET['file'])){
        
    $filename basename($_GET['file']);

        @
    header('Content-Disposition: attachment; filename="'.$filename.'"');
        @
    header('Content-Type: application/x-force-download; name="'.$filename.'"');

         
    readfile($filename);
    }
    ?>
     
  14. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ну смотри - readfile($filename) у тебя написано. Но перед этим ты делаешь $filename = basename($_GET['file']), то есть отсекаешь всё кроме имени файла... Таким образом твой скрипт отдаёт хидеры и пытается читать контент файла из той директории, в которой он находится сам... Попробуй вот так:

    Code:
    <?php
    if(!empty($_GET['file'])){
        $filename = trim($_GET['file']);
    
        @header('Content-Disposition: attachment; filename="'.basename($filename).'"');
        @header('Content-Type: application/x-force-download; name="'.basename($filename).'"');
    
         readfile($filename);
    }
    ?>
    Но учти, что в таком случае скрипт является include уязвимым... Тогда уже так делай:

    Code:
    <?php
    if(!empty($_GET['file'])){
        $filename = trim($_GET['file']);
    
        @header('Content-Disposition: attachment; filename="'.basename($filename).'"');
        @header('Content-Type: application/x-force-download; name="'.basename($filename).'"');
    
         readfile(dirname(__FILE__) . '/' . $filename);
    }
    ?>
     
    #7434 groundhog, 12 Jan 2009
    Last edited: 12 Jan 2009
    1 person likes this.
  15. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5
    groundhog Спасибо так работает!

    А как избавиться от иклуд??

    Pregmatch-ем можно?
     
  16. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Вот так замути

    Code:
    <?php
    if(!empty($_GET['file']) && file_exists($_GET['file'])){
        $filename = trim($_GET['file']);
    
        @header('Content-Disposition: attachment; filename="'.basename($filename).'"');
        @header('Content-Type: application/x-force-download; name="'.basename($filename).'"');
    
         $filename = str_replace('..', '', $filename);
         readfile(dirname(__FILE__) . '/' . $filename);
    }
    ?>
     
  17. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5

    А гет файл по моему тоже не проверяется это же инъекция по моему?
     
  18. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    ну если ты это в базу не пишешь, то нету инъекции
     
  19. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5
    groundhog Спасибо тебе
     
  20. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Гавно вопрос, обращайся если что
     
Thread Status:
Not open for further replies.