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

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

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

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Alekzzzander мне кажется вы нас обманываете. Сделайте вывод всех переменных и посмотрите, те ли они, которые вы ожидаете:
    PHP:
    var_dump($src_img);
    var_dump($name);
    $old_x=imageSX($src_img);
    $old_y=imageSY($src_img);
    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thum  b_w,$thumb_h,$old_x,$old_y); 
    imagedestroy($src_img);  
     
    _________________________
  2. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    PHP:
    if ($_FILES['img']['type'][$i]=="image/jpeg"){
    $src_img=imagecreatefromjpeg($name);}
    $name - string(50) "img/05ee73e6f705720266dc0046dc4e3cfa.jpg
    $src_img - NULL

    как я понимаю проблема в $src_img но что с ним не так незнаю
     
    #16062 Alekzzzander, 4 Aug 2010
    Last edited: 4 Aug 2010
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Alekzzzander во первых - нельзя верить $_FILES['img']['type'], во вторых - откуда берется $name все таки? Не логичнее ли было использовать $_FILES['img']['tmp_name'][$i].

    Подумав - $src_img - будет непроинициализирована, если ($_FILES['img']['type'][$i]=="image/jpeg") будет False. Логично что впоследствии все функции использующие непроинициализированную переменную будут возвращать ошибку
     
    _________________________
  4. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    у меня есть функция:
    function createthumb($name,$filename,$new_w,$new_h)
    то есть я использую ее в скрипте так:
    createthumb($f,....)
    переменная $f это и есть пусть к изображению с самим изображением то есть img/05ee73e6f705720266dc0046dc4e3cfa.jpg
    верить или нет но я сам беру jpg изображение
    хочу повториться, что до того как сделать попытку загрузки нескольких изображений, я работал с одним изображением, и все прекрасно работало, вопрос, почему не хочет работать с несколькими?
    и почему нельзя верить $_FILES['img']['type'] с таким же успехом нельзя верить самому формату .jpg и как тогда проверять изображение?
     
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Alekzzzander прочитайте по ссылке в моей подписи как правильно задавать вопросы. Пока вы не сказали ничего конкретного "сделал загрузку нескольких изображений" - как сделали, что сделали, что было до этого, после какого момента не работает?

    Задайте вопрос например так: "Есть функция, которая создает превью, вот ее код: [код] Вызывается отсюда и так: [код]. Для одиночного файла все работает. Сделал минимальные изменения, чтобы принимались несколько файлов так и вызываю функцию так: [код]. После этого работать перестало"

    $_FILES['img']['type'] - записывается браузером в пост запросе исходя из расширения файла (уточняю, ТОЛЬКО расширения, но не формата) - злоумышленник может подменить запрос так, что расширение файла будет например .php, а filetype передаваться image/jpeg (что например может привести к раскрытию путей, как минимум). Формату верить можно, например c помощью http://php.net/getimagesize можно узнать mime-type файла.
     
    _________________________
  6. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    Есть функция, которая создает превью, вот ее код:
    PHP:
    function createthumb($name,$filename,$new_w,$new_h){
    var_dump($name."|||");
        if (
    $_FILES['img']['type'][$i]=="image/jpeg"){
            
    $src_img=imagecreatefromjpeg($name);
        }
        if (
    $_FILES['img']['type'][$i]=="image/png"){
            
    $src_img=imagecreatefrompng($name);
        }
        if (
    $_FILES['img']['type'][$i]=="image/gif"){
            
    $src_img=imagecreatefromgif($name);
        }
    var_dump($src_img);
    $old_x=imageSX($src_img);
    $old_y=imageSY($src_img);
    if (
    $old_x $old_y) {
        
    $thumb_w=$new_w;
        
    $thumb_h=$old_y*($new_h/$old_x);
    }
    if (
    $old_x $old_y) {
        
    $thumb_w=$old_x*($new_w/$old_y);
        
    $thumb_h=$new_h;
    }
    if (
    $old_x == $old_y) {
        
    $thumb_w=$new_w;
        
    $thumb_h=$new_h;
    }

    $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h);
        
    imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); 


    if (
    $_FILES['img']['type'][$i]=="image/png")
    {
        
    imagepng($dst_img,$filename); 

    if (
    $_FILES['img']['type'][$i]=="image/gif")
    {
        
    imagegif($dst_img,$filename);
    }
    if (
    $_FILES['img']['type'][$i]=="image/jpeg")
    {
        
    imagejpeg($dst_img,$filename); 
    }
    imagedestroy($dst_img); 
    imagedestroy($src_img); 
    }
    Вызывается отсюда и так:
    createthumb($fi,$mimg.$nn.$type,$tsize,$tsize);
    где $fi это адрес изображения в формате img/05ee73e6f705720266dc0046dc4e3cfa.jpg
    $mimg.$nn.$type - уменьшиное изображение
    $tsize - размер изображения
    Для одиночного файла все работает. Сделал минимальные изменения, чтобы принимались несколько файлов, добавил цикл for ($i=0; $i < $ni; $i++) {
    Сами изображения на хост загружаются. но изменение размера не происходит
     
  7. гаррет-тень

    Joined:
    21 Dec 2009
    Messages:
    67
    Likes Received:
    2
    Reputations:
    0
    Есть файл например chislo.txt в нем записано число. Записываем число в переменную:
    PHP:
    $maxlength 100;  
    $open fopen("chislo.txt""r");  
    $string fgets($open$maxlength);  
    fclose($open);
    $float floatval($string); //Переделываем строку в число с плавающей точкой
    $A $float;
    Пусть число в файле chislo.txt было 0. Потом оно изменилось на 1000. $A стала равна 1000. Потом 1000 сменилось например на 2000. Как сделать так, чтобы $A стала равна 3000?
     
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Alekzzzander гораздо лучше, добавьте в начало функции createthumb строку:
    PHP:
    GLOBAL $i;
    почему и зачем - можно почитать тут: http://www.php.ru/manual/language.variables.scope.html

    гаррет-тень сформулируйте, пожалуйста, по какому принципу 0 записывается в $a как 0, 1000 записывается как 1000, а 2000 ВНЕЗАПНО записывается как 3000
     
    _________________________
    #16068 Gifts, 4 Aug 2010
    Last edited: 4 Aug 2010
    1 person likes this.
  9. гаррет-тень

    Joined:
    21 Dec 2009
    Messages:
    67
    Likes Received:
    2
    Reputations:
    0
    Не 2000 записывается как 3000, а 2000 складывается с 1000.
     
  10. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    PHP:
    $A += floatval($string);
     
  11. freshman

    freshman New Member

    Joined:
    1 Aug 2010
    Messages:
    37
    Likes Received:
    0
    Reputations:
    0
    я немнога в недопанимание
    вот код тка некак непоиму для чего нужно ето
    if($k===$selected)
    $ch=" selected";
    else $ch="";

    и зачем оптион подстовлается $ch пробовал без етого куска тоже всё работает ето тоже некак немогу понять $selected=0) зачем нол присваивать
    были догадки типа чтобы поначалу был выбран первыи индекс тоест нол нефига непоиму
    вот вес код
    <?php

    function selectItems($items, $selected=0){

    $test="";

    foreach ($items as $k=>$v){
    if($k===$selected)
    $ch=" selected";
    else $ch="";
    $text.="<option$ch value='$k'>$v</option>\n";
    }
    return $text;
    }

    $names=array("a"=>"one", "b"=>"two","c"=>"three");
    if(isset($_REQUEST['surname'])){
    $name=$names[$_REQUEST['surname']];
    echo "Your choice is : {$_REQUEST['surname']}, {$name} ";
    }

    ?>

    <form action="<?=$_SERVER['SCRIPT_NAME']?>" method=post>
    Select:
    <select name="surname">
    <?=selectItems($names,$_REQUEST['surename'])?>
    </select><br>
    <input type=submit value="get_surename">
    </form>
     
    #16071 freshman, 4 Aug 2010
    Last edited: 4 Aug 2010
  12. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    основы html. если в option написать selected, до этот пункт будет выделен по умолчанию, а $selected(0) это значение по умолчанию для функции
     
    #16072 SHiNiGaMi, 4 Aug 2010
    Last edited: 4 Aug 2010
  13. Afarcheg

    Afarcheg New Member

    Joined:
    20 Jul 2010
    Messages:
    16
    Likes Received:
    0
    Reputations:
    0
    Народ как мне быть.

    Помогите.
    PHP:
    imagealphablending($srcfalse);
        
    imagesavealpha($srctrue);
        
    imagecopy($thumb$src100245005034);
    $src это файл .PNG с прозрачнастю рисовал в адобе. Когда я его накладаваю на $thumb это .jpg то у $src чёрный фон и никакой прозрачности нет. Помогите подскажыте чё делать ? или ктота дайте пример...
     
  14. qW1zer

    qW1zer Member

    Joined:
    24 Aug 2009
    Messages:
    129
    Likes Received:
    15
    Reputations:
    5
    Afarcheg,попробуй измени формат $src на gif
    Если это что-то типа watermark'a то по идее он с гифом только более менее работает,если же я не ошибаюсь
     
  15. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    есть форма загрузки некольких файлов:
    PHP:
    <input type='file' name='img[]'><br>
    <
    input type='file' name='img[]'><br>
    <
    input type='file' name='img[]'><br>
    <
    input type='file' name='img[]'><br>
    Как сделать проверку, что если в форме нет файла, то в скрипте эта форма отбрасывается
    сечас есть такое исловие?
    PHP:
    if ($_FILES['img']['type'][$i]=="image/gif" || ($_FILES['img']['type'][$i]=="image/jpeg") || ($_FILES['img']['type'][$i]=="image/png")){
    скрипт...
    }
    else {
    echo 
    'Неверный формат файла';
    }
    вот сейчас если не во все формы вставлен файл, то выводит "Неверный формат файла" по количеству пустых форм
     
  16. phpdreamer

    phpdreamer Member

    Joined:
    26 Jul 2009
    Messages:
    522
    Likes Received:
    86
    Reputations:
    19
    Alekzzzander, скажи чесно, оно работает с 1+ файлами?
    нет

    у тебя input'ы все с одинаковым именем!
    сделай разные name и проверяй isset'ом
     
  17. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    тогда пол скрипта переписывать О.о есть же какой нить другой пособ? все норм работает но строки смущают, может есть проверка массивов ?
    если массив пустой то пропускается, если в нем что то есть то скрипт обрабатывает его...как?
     
    #16077 Alekzzzander, 5 Aug 2010
    Last edited: 5 Aug 2010
  18. Byte_

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

    Joined:
    7 Sep 2008
    Messages:
    143
    Likes Received:
    34
    Reputations:
    2
    вообще, у него всё сделано правильно - это массив из 4 инпутов
    а почему-бы не сделать проверку сначала?
    Code:
    if(!isset($_FILES['img']['type']['0'])||!isset($_FILES['img']['type']['1'])||!isset($_FILES['img']['type']['2'])||!isset($_FILES['img']['type']['3']))echo 'Не все поля заполнены';else{...}
    или я что-то не так понял?
     
  19. Alekzzzander

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

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    мне надо что бы человек мог загрузить 1 ИЛИ две или все 5 картинок, и небыло лишних надписей, в данный момент если загружаю 2 картинки а инпутов 5 то выскакивает 3 надписи Неверный формат файла вот я хочу что бы их небыло а яповлялись что бы только тогда когда формат файла и правда неверный
     
  20. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    PHP:
    if(($_FILES[file1][type] == 'image/jpeg') or !isset($_FILES[file1]))
    {
      
    //code here
    }
    else
    {
     echo 
    "<font color=red>Неверный формат</font>";
    }
    мб так
     
    1 person likes this.
Thread Status:
Not open for further replies.