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

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

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

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

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    ооо а там как раз это и написанно т.е эта функция move_uploaded_file.

    Code:
    
    
    
    // Copy uploaded file.
    				if(!move_uploaded_file($_FILES['avatar_file']['tmp_name'], $root . $path . $file)) $error = __('File upload failed.', 'avatars');
    				else chmod($root . $path . $file, 0644);
    
    				// Resize required?
    				if($avatar_options['resize'] == 'on') {
    					$scaled_size = (empty($avatar_options['scale']) ? SCALED_SIZE : $avatar_options['scale']);
    
    					// Required, but is it needed?
    					$info = getimagesize($root . $path . $file);
    					if($info[0] > $scaled_size || $info[1] > $scaled_size) {
    						// Resize required and needed...
    						$resized_file = image_resize($root . $path . $file, $scaled_size, $scaled_size, true, SUFFIX);
    						if(!is_wp_error($resized_file) && $resized_file && $info = getimagesize($resized_file)) {
    							$parts = pathinfo($file);
    							$file = basename($resized_file, '.' . $parts['extension']) . '.' . $parts['extension'];
    						}
    						else $error = __('Unable to resize image.', 'avatars');
    					}
    				}
    
    
    
    
    как читать ? убрать ее вообще ?
     
  2. Adio

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

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Если я его убираю то он в базу записует код из теплейта т.е временного файла - а в папку не чего не закачивает... что там нужно сделать ? ... если конечно из этого кода реально понять.
     
  3. Adio

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

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18

    Убираю строки

    Code:
    				if(!move_uploaded_file($_FILES['avatar_file']['tmp_name'], $root . $path . $file)) $error = __('File upload failed.', 'avatars');
    				else chmod($root . $path . $file, 0644);
    
    При аплоаде файл в папку не попадает , в базу попадает имя оригинала. Как быть тогда без


    !move_uploaded_file ?
     
  4. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Подскажите какую функцию сравнения взять если надо сравнить к примеру 2 текста.
    1 - Привет как дела
    2 - Привет
    Если эта функция в первом нашла второе слово то выдает true.
    При том надо чтобы эта функция сравнивала не смотря на регистр.
     
  5. nosfy

    nosfy New Member

    Joined:
    31 Jul 2010
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Не уверен что вопрос в полной мере относится к пхп , но всеже.
    Раньше для парсинга списка доменов godaddy прокатывал простой POST, теперь логика изменилась, видимо встроили какую-то защиту на основе сессий, не врубаюсь.

    Вот что пробую я:

    1) берем куку и пишем в файл
    PHP:
    $bh=curl_init('');
      
    curl_setopt($bhCURLOPT_URL'https://auctions.godaddy.com/trpHome.aspx?ci=12712&t=11'); 
      
    #curl_setopt($bh, CURLOPT_COOKIESESSION, TRUE); 
      
    curl_setopt($bhCURLOPT_HEADER1);
      
    curl_setopt($bhCURLOPT_FOLLOWLOCATION1);
      
    curl_setopt($bhCURLOPT_SSL_VERIFYPEERFALSE);
      
    curl_setopt($bhCURLOPT_ENCODING"");
      
    curl_setopt($bhCURLOPT_COOKIESESSIONTRUE);
      
    curl_setopt($bhCURLOPT_RETURNTRANSFER1);

      
    curl_setopt($bhCURLOPT_COOKIEJAR'cookiefile.txt'); 
      
    curl_setopt($bhCURLOPT_USERAGENT'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)');  // useragent
      
    curl_setopt($bhCURLOPT_TIMEOUT60);
     
    $content0 curl_exec$bh );

    2)Парсим спец. поля в коде страницы, они потом дописываются в POSTе (через js):

    PHP:
    preg_match('#s_featTimeoutHandler;[^v]+var (\S+) = "([^"]+)";#is' ,$content0$fields);
    3) формируем $postdata, &rnd я взял статичным, т.к. это поидеи обычный Math.random(); который генерится на стороне клиента и никак от сервера не зависит. Добавляю поля спарсенные preg_match:

    PHP:
    $postdata="t=11&action=search&hidAdvSearch=&rpp=25page=5&pageMode=3&rnd=0.5378834512742707&{$fields[1]}={$fields[2]}";
    4) делаем POST с нашими данными и нашей кукой

    PHP:
    function post_content ($postdata) {
     
    $ch curl_init();
      
    curl_setopt($chCURLOPT_URL'https://auctions.godaddy.com/trpSearchResults.aspx');
      
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
      
    curl_setopt($chCURLOPT_COOKIEFILE'cookiefile.txt'); 
      
    curl_setopt($chCURLOPT_HEADER0);
      
    curl_setopt($chCURLOPT_FOLLOWLOCATION1);
      
    curl_setopt($chCURLOPT_SSL_VERIFYPEERFALSE);
      
    curl_setopt($chCURLOPT_ENCODING"");
      
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)');  // useragent
      
    curl_setopt($chCURLOPT_TIMEOUT60);
      
    curl_setopt($chCURLOPT_POST1);
      
    curl_setopt($chCURLOPT_POSTFIELDS$postdata);

     
    $content curl_exec$ch );
      
    $err     curl_errno$ch );
      
    $errmsg  curl_error$ch );
      
    $header  curl_getinfo$ch );
      
    curl_close$ch );
      

      
    $header['errno']   = $err;
      
    $header['errmsg']  = $errmsg;
      
    $header['content'] = $content;
      return 
    $header;

    }


    Ну и получаю в итоге:

    Code:
     <table width="100%"><tr><td align="center">Session may have expired; <a href="javascript:window.location.reload();">refresh page</a> to continue.<br /><br />If you continue to see this message, make sure browser cookies are enabled.</td></tr></table>
    )
    
    Вот что удалось выяснить опытным путем:

    а) волшебные поля похоже привязываются к сессии
    б) волшебные поля остаются неизменными при просмотре страниц списка доменов, т.е. теоретически можно отпарсить все 40 тыщ не меняя эти параметры
    в) я пробовал воспроизводить успешный POST запрос, не сбрасывая сессию и изменяя лишь параметр rnd, как не странно, но в этом случае сервак выдает ошибку
    г) если сдампить пост и попробовать его в точности воспроизвести, иногда проходит, а иногда нет и инфа явна не кэшированная. Зависимость выяснить не удалось.
     
  6. Mixon

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

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Подскажите,по поводу относительных путей.
    есть у меня скрипт,есть приставка пути вида
    /img/abc/ .$_POST['put'];
    По сути должны создаваться пути вида /img/abc/myimg.png
    Но пользователь может подменять путь,высылая другой запрос,стоит ли этого опасатся?
    возможно ли подменение пути типу
    /img/abc/../../../index.php ?
    будет-ли переходить в коренную часть сайта,выставляя /../ ?
     
  7. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    будет, делай
    basename($_POST['put']);
     
  8. Mixon

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

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    хм,basename чуток не подходит,мне нужно разрешить еще пути вида /img/abc/xyz.png
    передаваться будет abc/xyz.png
     
    #16028 Mixon, 1 Aug 2010
    Last edited: 1 Aug 2010
  9. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    "abc/".basename($_POST[put]);
    а так?
     
  10. Mixon

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

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Пользователь должен передавать имя каталога или каталогов,т.е. есть на сайте папка img главная,в ней еще 10 папок быть может,нужно чтобы по ним он мог проходить,но ЗА пределы img выйти не мог,т.е. отключить любые переходы вида . и ..
     
  11. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    права просто поменяй 700 допустим
     
  12. Mixon

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

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    не,права то такое...это CMS,установит какой-то плуг,не сменит права и завалят его...
    а постоянно проверять на права тоже не в кайф...
    какие еще соображения есть?
     
  13. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    регуляркой
    либо strpos если найдет строку "/." то exit;
     
    #16033 SHiNiGaMi, 1 Aug 2010
    Last edited: 1 Aug 2010
  14. Mixon

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

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    и что мне искать?
    пример?
    если убивать все . тогда расширение умрёт...
    равечто заменять ../ ./ .\ ..\
    или как? я же всех фокусов не знаю,то и учесть не просто
     
  15. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    ну можно и так
    PHP:
    preg_replace("#(\.\./|\.\.\\|\./|\.\\)#","");
    либо
    PHP:
    if(strpos($url"./") or strpos($url".\"))
      exit;
     
  16. Mixon

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

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Опа,я вот что придумал.
    А что если через patchinfo вырезать filename (т.е. имя файла) а даже просто через str_replace заменить Все . потому как имя файла уже есть)
    переходить по путям можно-же только через . ?
     
  17. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    вообще просто запиши имя текущей папки в сессию, потом доставай ее и конкатенируй с basename чтобы этой паранойи не было
     
  18. Mixon

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

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Эмм...не оч понял суть,потому как папку задает пользователь

    $path_parts=pathinfo('../.././img/.././../his/img.php');
    $path=str_replace('.','',$path_parts['dirname']).'/'.$path_parts['basename'];
    echo 'img/'.$path;

    думаю вот это норм будет)
    пускай путь стает и img////img////his/img.php
    но из img он то не вийдет))
    а то что сам он задаст неизвестный путь - его проблемы,ничего работать не будет)

    Теперь остается только надеятся,что по путям можно ходить только через .
     
    #16038 Mixon, 1 Aug 2010
    Last edited: 1 Aug 2010
  19. SHiNiGaMi

    SHiNiGaMi Banned

    Joined:
    3 Jan 2010
    Messages:
    382
    Likes Received:
    55
    Reputations:
    15
    ну так даже лучше, я имел ввиду что надо завести сессию, в которой хранится имя текущей папки, чтобы потом к нему присоединялось имя файла
     
  20. Mixon

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

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    >> в которой хранится имя текущей папки
    основная папка всегда img,потом КЛИЕНТ передает ПУТЬ из папок (не одной) и присоединяется имя...то в любом случае надо тот путь из папочек что передан парсить)
     
Thread Status:
Not open for further replies.