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

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

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

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    %d0%e5%ec%e5%ed%fc%20.jpg - 'Ремень .jpg'
    Убрал бы пробел перед .jpg и хватило бы urlencode (т.к. urlencode вместо пробела ставит +)
    Есть вариант менять через str_replace плюсы на пробелы
    str_replace('+','%20',urlencode($url))
    Либо по циклу берёшь ord() от каждого символа, переводишь в HEX, ставишь перед каждым хексом % (перед однобайтовым хексом 0 не забудь).. можно, конечно, ещё наложить фильтр на латину (точки и т.д.) и всё в strtolower() и тогда будет полное соответствие :)

    upd: насчёт rawurlencode('картинка.jpg') -- проверь правильность ввода имени файла в строке, мало ли там где пробел или похожая буква из другого языка (т.е. имя файла копи-паст)
     
    #15221 roxblnfk, 27 May 2010
    Last edited: 27 May 2010
    1 person likes this.
  2. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    roxblnfk, спасибо тебе! Сразу понял, в чём затык был.

    Прокатил вариант - str_replace('%2F', '/', rawurlencode($url))
    При urlencode тоже ещё пришлось менять '%2F' на '/'
     
  3. w_2k

    w_2k New Member

    Joined:
    23 Jul 2008
    Messages:
    29
    Likes Received:
    1
    Reputations:
    0
    Доброго времени суток! Народ, помогите со скриптом. Всего-то надо просто залить файл в папку с правами 777, писал свой скрипт, качал готовые, ниче не работает. Вот пример:
    Форма:
    Code:
    <html>
    <head>
    <title>Обработка переданного файла</title>
    </head>
    <body>
    <form action=upload.php method="POST" enctype=multipart/form-data>
    Выберите файл:<br>
    <input type="file" name=File><br>
    <br>
    <input type=submit name=doUpload value="загрузить"><br>
    </form>
    </body>
    </html>
    
    Обработчик
    Code:
    <?php 
    $ImgDir="."; 
    print $_POST['File']; 
    print $_FILE['File'];
      if ($_POST['doUpload'])  
        { 
    	print "asda";
         if (file_exists($File))  
           { 
    		print "123";
           Copy($File, "$ImgDir/".basename($File_name)); 
           } 
        } 
    ?>
    
    Переменная $File почему-то пустая...Можешь поможет кто?
     
  4. w_2k

    w_2k New Member

    Joined:
    23 Jul 2008
    Messages:
    29
    Likes Received:
    1
    Reputations:
    0
    Благодарю)
     
  5. FindeR

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

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Помогите разобраться.
    Была проблема с загрузкой постом файлов на сервак.
    Накидал вот такой скрипт для теста (кинул в папку с правами 777).

    PHP:
    <?php
    if (empty($_FILES["img_file"]["name"])) {
    ?>
    <form action="index.php" method="POST" enctype="multipart/form-data">
    img: <input type="file" name="img_file" />
    <input type="submit" value="Загрузить" />
    </form>
    <?php
    }
    else {

    $imageinfo getimagesize($_FILES['img_file']['tmp_name']);
     if(
    $imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/png'
    {
    echo 
    '<span style="font-size:13px;">Ошибка загрузки изображения.</span>';
    }

    else
    {
    move_uploaded_file($_FILES["img_file"]["tmp_name"], $_FILES["img_file"]["name"]);

    echo 
    '<img src="'.$_FILES["img_file"]["name"].'" />';
    }
    }
    ?> 
    На денвере всё замечательно. Загружаются jpg,gif,png.

    А вот при заливке на хостинг начинаются проблемы.

    1) При попытке загрузки jpg/jpeg вываливает "Ошибка загрузки изображения". Причём, $_FILES['img_file']['tmp_name'] не пуст! А вот getimagesize от него уже не берётся - пусто. Правда, догадываюсь, что это связано со вторым вопросом :)

    2) При загрузке оставшихся png и gif он их загружает, отрабатывается move_uploaded_file (файл появляется в папке), но вот потом нифига не отображается. В мозиллке отображается иконка повреждённого файла, в IE крестик...Если слить с сервера файл - не открывается уже. Откуда берётся эта "обработка" файла?
     
  6. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    У меня такое же было. Может быть потому что на хостинге *nix а символы переноса строки в винде и *nix разные.(\r\n и \n) При переходе из одной системы в другую они интерпретируются, а т.к. Картинка передается как бинарник, то содержимое файла меняется и он повреждается.
     
    #15226 SHiNiGaMi, 29 May 2010
    Last edited: 29 May 2010
  7. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    Как проверить ftp на валидность php средствами?
     
  8. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    http://php-book.net/ftp-connect.html

    FindeR, echo $_FILES['uploadfile']['error'];

    и еще попробуй указать точный путь до файла

    PHP:
    move_uploaded_file($_FILES["img_file"]["tmp_name"], dirname(__FILE__).'/'.$_FILES["img_file"]["name"]); 
     
    #15228 Chaak, 29 May 2010
    Last edited: 29 May 2010
  9. GrinGoO

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

    Joined:
    1 Jul 2008
    Messages:
    98
    Likes Received:
    95
    Reputations:
    -1
    Итак, нужно отредактировать файл через форму. В данном случае html файл шаблона.

    Делаю всё это так:

    PHP:
    <?php
    file_get_contents
    ("../../style/header.html"); //Получаю содержимое
    // ну и проверяю переменную и записываю в файл и перенаправляю на страницу, которая сообщает о успешном действии.
    if(empty($_POST['header'])) {
        
    file_put_contents("../../style/header.html"$_POST['header']);
        
    header("Location: ../ok.php");
    }

    ?>
    HTML:
    <form action="editstyle.php" method="post">
      <textarea name="header" cols="100" rows="20"><?=$header; ?></textarea>
      <input type="submit" value="Записать" />
    </form>
    </body>
    </html>

    Внимание вопрос: после записи html в файл записывается много лишних слешей.. Перед каждой кавычкой добавляется "\" (обратный слеш). Как это избежать?
     
  10. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    stripslashes();

    или отключи в php.ini magic_quotes_gpc
     
    2 people like this.
  11. bug999

    bug999 New Member

    Joined:
    19 Oct 2009
    Messages:
    12
    Likes Received:
    1
    Reputations:
    0
    нужно написать скрипт который будет записывать в файл все ссылки с которых перешли на страницу, ну с суперглобального масива. помогите
     
  12. Chaak

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

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    $_SERVER['HTTP_REFERER']
    fopen()
    fwrite()
    fclose()
     
  13. DonKihot

    DonKihot New Member

    Joined:
    23 May 2010
    Messages:
    28
    Likes Received:
    2
    Reputations:
    0
    1-ая строка /www
    2-ая строка /www/script/

    Как из 2-строки удалить совпадающую подстроку с 1-ой строкой,
    чтобы получить /script

    Если для этого спец.функция?
     
  14. POS_troi

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

    Joined:
    1 Dec 2006
    Messages:
    1,569
    Likes Received:
    466
    Reputations:
    108
    echo substr("/www/script/", 4);

    отдаст /script

    А вообще начать нужно отсюда http://phpfaq.ru/docs
     
  15. wildshaman

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

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    $str1="/www";
    $str2="/www/script/";
    echo str_replace($str1, "", $str2);
     
  16. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <?
    $str1="/www/script";
    $str2="/www";
    if (
    strpos($str1$str2) === false$str2=str_replace($str1""$str2);
    else 
    $str1=str_replace($str2""$str1);
    echo 
    $str1 " : " $str2;
    ?>
    ^_^
     
  17. DonKihot

    DonKihot New Member

    Joined:
    23 May 2010
    Messages:
    28
    Likes Received:
    2
    Reputations:
    0
    есть файл index.php например.
    Он запущен.
    Какой функцией можно определить его название.

    p.,s: название файла нужно заносить будет в переменную.
     
  18. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    $_SERVER[PHP_SELF];
     
  19. Failure

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

    Joined:
    21 Sep 2008
    Messages:
    179
    Likes Received:
    46
    Reputations:
    16
    PHP_SELF это путь к файлу, если только имя то
    Code:
    substr(strrchr(__FILE__, DIRECTORY_SEPARATOR), 1)
     
  20. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    echo substr($_SERVER['SCRIPT_NAME'],1);

    ^_^
     
    1 person likes this.
Thread Status:
Not open for further replies.