ооо а там как раз это и написанно т.е эта функция 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'); } } как читать ? убрать ее вообще ?
Если я его убираю то он в базу записует код из теплейта т.е временного файла - а в папку не чего не закачивает... что там нужно сделать ? ... если конечно из этого кода реально понять.
Убираю строки 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 ?
Подскажите какую функцию сравнения взять если надо сравнить к примеру 2 текста. 1 - Привет как дела 2 - Привет Если эта функция в первом нашла второе слово то выдает true. При том надо чтобы эта функция сравнивала не смотря на регистр.
Не уверен что вопрос в полной мере относится к пхп , но всеже. Раньше для парсинга списка доменов godaddy прокатывал простой POST, теперь логика изменилась, видимо встроили какую-то защиту на основе сессий, не врубаюсь. Вот что пробую я: 1) берем куку и пишем в файл PHP: $bh=curl_init(''); curl_setopt($bh, CURLOPT_URL, 'https://auctions.godaddy.com/trpHome.aspx?ci=12712&t=11'); #curl_setopt($bh, CURLOPT_COOKIESESSION, TRUE); curl_setopt($bh, CURLOPT_HEADER, 1); curl_setopt($bh, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($bh, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($bh, CURLOPT_ENCODING, ""); curl_setopt($bh, CURLOPT_COOKIESESSION, TRUE); curl_setopt($bh, CURLOPT_RETURNTRANSFER, 1); curl_setopt($bh, CURLOPT_COOKIEJAR, 'cookiefile.txt'); curl_setopt($bh, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'); // useragent curl_setopt($bh, CURLOPT_TIMEOUT, 60); $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($ch, CURLOPT_URL, 'https://auctions.godaddy.com/trpSearchResults.aspx'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookiefile.txt'); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_ENCODING, ""); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)'); // useragent curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_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, как не странно, но в этом случае сервак выдает ошибку г) если сдампить пост и попробовать его в точности воспроизвести, иногда проходит, а иногда нет и инфа явна не кэшированная. Зависимость выяснить не удалось.
Подскажите,по поводу относительных путей. есть у меня скрипт,есть приставка пути вида /img/abc/ .$_POST['put']; По сути должны создаваться пути вида /img/abc/myimg.png Но пользователь может подменять путь,высылая другой запрос,стоит ли этого опасатся? возможно ли подменение пути типу /img/abc/../../../index.php ? будет-ли переходить в коренную часть сайта,выставляя /../ ?
хм,basename чуток не подходит,мне нужно разрешить еще пути вида /img/abc/xyz.png передаваться будет abc/xyz.png
Пользователь должен передавать имя каталога или каталогов,т.е. есть на сайте папка img главная,в ней еще 10 папок быть может,нужно чтобы по ним он мог проходить,но ЗА пределы img выйти не мог,т.е. отключить любые переходы вида . и ..
не,права то такое...это CMS,установит какой-то плуг,не сменит права и завалят его... а постоянно проверять на права тоже не в кайф... какие еще соображения есть?
и что мне искать? пример? если убивать все . тогда расширение умрёт... равечто заменять ../ ./ .\ ..\ или как? я же всех фокусов не знаю,то и учесть не просто
ну можно и так PHP: preg_replace("#(\.\./|\.\.\\|\./|\.\\)#",""); либо PHP: if(strpos($url, "./") or strpos($url, ".\")) exit;
Опа,я вот что придумал. А что если через patchinfo вырезать filename (т.е. имя файла) а даже просто через str_replace заменить Все . потому как имя файла уже есть) переходить по путям можно-же только через . ?
вообще просто запиши имя текущей папки в сессию, потом доставай ее и конкатенируй с basename чтобы этой паранойи не было
Эмм...не оч понял суть,потому как папку задает пользователь $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 он то не вийдет)) а то что сам он задаст неизвестный путь - его проблемы,ничего работать не будет) Теперь остается только надеятся,что по путям можно ходить только через .
ну так даже лучше, я имел ввиду что надо завести сессию, в которой хранится имя текущей папки, чтобы потом к нему присоединялось имя файла
>> в которой хранится имя текущей папки основная папка всегда img,потом КЛИЕНТ передает ПУТЬ из папок (не одной) и присоединяется имя...то в любом случае надо тот путь из папочек что передан парсить)