Скрипт создания скриншотов

Печать RSS
344

G

Землянин
0
Хороший ребята,из-за 50 рублей такую бессмысленную тему устроили
S

MobileFun Club
0
за 10р возьму.
Изменил: Sonikflame (17.12.2012 / 19:47)

Голубые штаны
0
12. Sonikflame, ок, покупай то,что в 7 посте выложено бесплатно ))

Землянин
0
А
Автор
Пришелец
0
9. dima.london, мда, тебе как кодеру должно быть стыдно за свои слова smile
Начну с самого начала:
function screen($url="", $browser="ie9") { 
    if (!empty($url)) {
Первое: Делать проверку на пустоту переменной внутри тела функции, делая этот аргумент функции по умолчанию пустым, - это быдлокод.
Все проверки должны быть осуществлены до того как данные попали в функцию, дабы исключить пустой результат.
Ты же умышленно разрешаешь использование пустого результата в переменной $url, тем самым провацируя скрипт на проверку.
Второе: для чего был задан второй аргумент функции $browser, если он нигде не используется?
Я так понимаю он должен вставляться в адрес URL browser='.$browser Сочтём это за твою невнимательность. Идём далее:
$content=file_get_contents('http://ipinfo.info/netrenderer/index.php?url=' .$url .'&browser=ie7');
Вот ещё кусок быдлокода smile Вставляя адрес из переменной $url ты забываешь экранировать данные функцией urlencode(). Привет XSS уязвимости hello :
Третье: смотрим код дальше:
preg_match_all('/image.php\?imgid=(.*?)"/i', $content, $h);
Символ "." (точка) является спецсимволом регулятного выражения (совпадает с любым символом, кроме символа перевода строки) который тоже необходимо эранировать.
Использование функции preg_match_all(), для получения единичного совпадения по шаблону регулярного выражения, в данном месте не уместно. Достаточно функции preg_match()
Ну а проверка ниже меня просто убила:
Твой код:
if (isset($h) && isset($h[1][0])) {
Если регулярка сработала и совпадение нашлось то все её параметры будут заполнены.
Достаточно поместить функцию preg_match() в условие и она исключит все ненужные проверки.
А
Автор
Пришелец
0
Рассмотрев весь твой код я привёл его к нормальному виду:
function screen($url, $browser="ie9") {
    $urlstr = 'http://ipinfo.info/netrenderer/index.php?url='.urlencode($url).'&browser='.$browser;
    if(($content = file_get_contents($urlstr))) {
        if(preg_match('/image\.php\?imgid=(.+?)"/i', $content, $h) != 0) {
            return $h[1];
        }
    }
    return false; 
}

P.S. если уж делаешь присвоение в условии то его необходимо выделять в отдельные круглые скобки. Это я тебе про этот кусок кода:
if ($s = screen($url)) { 
    echo '<img src="http://renderer.geotek.de/image.php?imgid=' . $s . '" alt="">'; 
}
Условие должно быть таким:
if(($s = screen($url))) {

P.P.S. можешь сжечь книжки по которым тебя учили, "старший". Вместо того чтоб языком чесать не по делу пошёл бы и подучил PHP.
Надеюсь я снизел твою самооценку и спустил тебя с небес smile

P.P.P.S. никого не хотел обидеть, просто надоело уже... всем peace, пишите скрипты, для вас 10 мин строчил пост Okula ;)

Голубые штаны
0
if ($s = screen($url)) {
сработает аналогичному
if(isset($s)) {

и книжки тут не при чем. Читайте мануалы по СИ.
А
Автор
Пришелец
0
А причём тут СИ? Это разные языки программирования и сравнивать их глупо. В PHP, например, нет такой жёсткой типизации как в Си.

P.S. код выше сработает не аналогично.
Например:
$s = FALSE;
if(isset($s)) {
    echo 'Условие выполнилось';
}
Условие выполнится.
А если сделать так:
$s = FALSE;
if($s) {
    echo 'Условие выполнилось';
}
Условие никогда не выполнится, а так как функция screen() возвращает либо FALSE, либо текст (что соответствует TRUE) это разные записи и результат их выполнения будет отличен.
Изменил: Александр (17.12.2012 / 22:47)

Голубые штаны
0
ок[b][/b]

Чатланин
0
19. dima.london, бери парня на работу. Утер smile
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск