Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Помогите с php функцией.

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть такая функция:

Код:
 
function cleanRequestVars(&$array, $name = NULL, $def = NULL, $strict = FALSE, $lengthcheck = 15) {
    // Sanitise $_request for further use.  This method gives more control and security.
    // Method is more for functionality rather than beauty at the moment, will correct later.
    unset($array['usercookie']);
    unset($array['PHPSESSID']);
 
    if (is_array($array) && $name == NULL) {
        $globals = array();
        foreach (array_keys($array) as $k) {
            $value = strip_tags(trim($array[$k]));
            if (strlen($value >= $lengthcheck)) {
                return NULL;
            }
            if (ctype_digit($value)) {
                $value = intval($value);
            } else {
                if ($strict == TRUE) {
                    $value = preg_replace('/\W/', '', trim($value));
                }
                $value = strtolower(strval($value));
            }
            $globals[$k] = $value;
        }
        return $globals;
    }
    if (!isset($array[$name]) || !array_key_exists($name, $array)) {
        return $def;
    } else {
        $value = strip_tags(trim($array[$name]));
    }
    if (ctype_digit($value)) {
        $value = intval($value);
    } else {
        if ($strict == TRUE) {
            $value = preg_replace('/\W/', '', trim($value));
        }
        $value = strtolower(strval($value));
    }
    return $value;
}
 

При проведение через нее кириллицы (проверялось на UTF-8) на выходе имеем всякую нечетабельную дрянь.
 
Как и что нужно поменять в функции, что б кириллица проходила нормально?

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 12:16 23-08-2013 | Исправлено: Grafus, 07:53 24-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus

Цитата:
Как и что нужно поменять в функции, что б кириллица проходила нормально?

добавить модификатор /u в регулярки
 
ps: нет "пхп", есть "php"

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:58 23-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
СПС
А еще чутка не поможешь?
Хочу получить ссылки с в контакте, но что то не получается.
Вот код (простенько и со вкусом):

Код:
 
<?php
function vkimg($cid = 0) {
    global $xoopsUser, $xoopsModule;
 
    $url = file_get_contents('http://m.vk.com/video'.$cid);
    preg_match_all('!controls="controls" poster="(.*)">!isU', $url, $res, PREG_SET_ORDER);
    return $res[0][1];
 
}
 
function vkvid($cid = 0) {
    global $xoopsUser, $xoopsModule;
 
    $url = file_get_contents('http://m.vk.com/video'.$cid);
    preg_match_all('!<source src="(.*)" type="video/mp4">!isU', $url, $res, PREG_SET_ORDER);
    return $res[0][1];
 
}
echo vkimg'26735589_165988209');
echo '<br />';
echo vkvid('26735589_165988209');
?>
 

 
На выходе получаем:

Код:
 
http://cs518219.vk.me/u26735589/video/l_ea2972d7.jpg
http://cs518219v4.vk.me/u26735589/videos/17fa3a7a0f.720.mp4
 

А должно быть (согласно браузеру):

Код:
 
http://cs518219.vk.me/u26735589/video/l_ea2972d7.jpg
http://cs518219v4.vk.me/u26735589/videos/61bb905352.720.mp4
 

В чем прикол?

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 00:33 24-08-2013 | Исправлено: Grafus, 07:57 24-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus
код неполный
 
сервер может анализоровать и запрос, подставляя те или иные данные.
 

Цитата:
file_get_contents

создает запрос, который существенно отличается от запроса браузера - посмотрите сами.
 
ps: попросил же (хоть и неявно) поправить название темы - нет слова "пхп"


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:42 24-08-2013 | Исправлено: Cheery, 00:53 24-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
создает запрос, который существенно отличается от запроса браузера - посмотрите сами.

А как создать запрос наиболее похожий на запрос браузера?
Код я поправил. В итоге я хочу из него сделать ссылку "Скачать Видео".
 
ЗЫ
Плюс, заметил что итог отдачи у них диномический. Например сегодня выглядит так:

Код:
 
http://cs518219.vk.me/u26735589/video/l_ea2972d7.jpg
http://cs518219v4.vk.me/u26735589/videos/6957262ee1.720.mp4
 

 
А должно так:

Код:
 
http://cs518219.vk.me/u26735589/video/l_ea2972d7.jpg
http://cs518219v4.vk.me/u26735589/videos/94457cb9a4.720.mp4
 

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 07:55 24-08-2013 | Исправлено: Grafus, 09:35 24-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus

Цитата:
А как создать запрос наиболее похожий на запрос браузера?  

curl или fsockopen со всеми http заголовками

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 09:30 24-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
curl или fsockopen со всеми http заголовками

 
ОК
 
Вот это выдает ту же неверную ссылку:

Код:
 
<?php
 
header('Content-Type: text/html; charset=utf-8');
    $url_in = 'http://vk.com/video_ext.php?oid=26735589&id=165988209&hash=7de1d43d654084dc&hd=3';
 
    function curl($url, $cookie = false, $post = false, $header = false, $follow_location = false)  
    {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FAILONERROR, true);
    curl_setopt($ch, CURLOPT_HEADER, $header);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $follow_location);
    if ($cookie) {
        curl_setopt ($ch, CURLOPT_COOKIE, $cookie);
    }
    if ($post) {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    $response = curl_exec ($ch);
    curl_close($ch);
    return $response;
    }
 
    $vk_video = curl($url_in);
    preg_match('|host=(.*)&amp;|Uis', $vk_video, $link1);
    preg_match('|uid=(.*)&amp;|Uis', $vk_video, $link2);
    preg_match('|vtag=(.*)&amp;|Uis', $vk_video, $link3);
    $link= $link1['1'].'u'.$link2['1'].'/video/'.$link3['1'].'.720.mp4';
   echo $link;  
 
?>
 

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 00:34 25-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus

Цитата:
$header

где?
еще, как вариант - ссылка может зависеть от куки или ip посетителя
что и есть, похоже, так как мне выдает, к примеру
 
http:\\\/\\\/cs518219v4.vk.me\\\/u26735589\\\/videos\\\/f8120ec893.240.mp4
 
элементарная фича для антилича - чтобы не вставляли ссылки на другие сайты.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:03 25-08-2013 | Исправлено: Cheery, 01:04 25-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
элементарная фича для антилича

А подскажи, есть ли способ ее обойти?

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 08:17 25-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus

Цитата:
А подскажи, есть ли способ ее обойти?

надо знать на основе чего это генерится.
скорее всего можно только скачать к себе.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 08:28 25-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
скорее всего можно только скачать к себе.
 

Несогласен вот тут продают уже готовое. Но то за деньги и чужое. А хочется своего и бесплатно. Но на их примерах видно, что это реализуемо.
 
Добавлено:
Короче говоря, немного поманипулировав я пришел к выводу, что имя файла зависит от IP клиента и текущей даты.
Остался один вопрос, что это за хешь сумма (md5 и sha1 слишком длинные, а crc32 не содержит буковок) и как она складывается?
Есть идеи?

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 14:04 25-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus

Цитата:
Но на их примерах видно, что это реализуемо.

они проксируют поток через себя (свой сервер), поэтому проблем с IP и временем не возникает, но идет лишний (и двойной) трафик через сервер.  


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:49 25-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery

Цитата:
они проксируют поток через себя (свой сервер), поэтому проблем с IP и временем не возникает, но идет лишний (и двойной) трафик через сервер.  

Трафик не важен . Спс за совет, так получилось.

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 08:40 26-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть еще один вопрос
Как составить функцию сканирования каталога так, что бы получить массив такого вида:

Код:
 
array(
    'file1'      => 'file1',
    'file2'      => 'file2',
    'file3'      => 'file3',
    'file4'      => 'file4',
    'file5'      => 'file5',
    'file6'      => 'file6',
    'file7'      => 'file7',
    'file8'      => 'file8'
 

Фантазии хватает только на:

Код:
 
$mydirname = basename(dirname(__FILE__));
$f = scandir($mydirname);
 
foreach ($f as $file){
    if(preg_match('/\.(txt)/', $file)){
        $skin .= $file.' => '.$file.',';
    }
}
 

Но это не совсем (совсем не) корректно.
Куда меня занесло и как от теля вылезти?

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 12:27 26-08-2013
mishakor

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
если я вас правильно понял, то как то так

Код:
$mydirname = basename(dirname(__FILE__));  
$f = scandir($mydirname);  
$skin = array();
foreach ($f as $file){  
    if(preg_match('/\.(txt)/', $file)){  
        $skin['$file'] = $file;  
    }  
}
print_r($skin);

Всего записей: 65 | Зарегистр. 29-09-2008 | Отправлено: 13:41 26-08-2013 | Исправлено: mishakor, 13:41 26-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mishakor

Цитата:
если я вас правильно понял, то как то так  

Такая комбинашка отображает только один файл:

Код:
 
<?php
$mydirname = dirname(dirname(__FILE__)).'/skins/';  
$f = scandir($mydirname);  
$skin = array();  
foreach ($f as $file){  
    if(preg_match('/\.(txt)/', $file)){  
        $skin['$file'] = $file;  
    }  
}  
print_r($skin);
?>
 

Результат:

Код:
 
Array ( [$file] => video16-1515.txt )
 

А в папке файлов лежит 3.
Да и на выходе нужно получить:

Код:
 
Array (  video16-1515.txt => video16-1515.txt, video16-1516.txt => video16-1516.txt, video16-1517.txt => video16-1517.txt )
 

 
Изменил так:

Код:
 
<?php
$mydirname = dirname(dirname(__FILE__)).'/skins/';  
$f = scandir($mydirname);  
$skin = array();  
foreach ($f as $file){  
    if(preg_match('/\.(txt)/', $file)){  
        $skin[$file] = $file;  
    }  
}  
print_r($skin);
?>
 

Но теперь в Array, хоть и ищутся все файлы, выглядит это так:

Код:
 
Array (  [video16-1515.txt] => video16-1515.txt [video16-1516.txt] => video16-1516.txt [video16-1517.txt ]=> video16-1517.txt )
 

При этом присутствуют кв. кавычки и отсутствуют запятые.

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 13:59 26-08-2013 | Исправлено: Grafus, 14:25 26-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus

Цитата:
Такая комбинашка отображает только один файл:  


Цитата:
$skin['$file']

одинарные кавычки не нужны.
 
зачем вам вообще и ключ и значение одинаковые??
 

Код:
  $files = glob('*');
  $array = array_combine($files, $files);
  var_dump($array);

 
если только текстовые, то  
$files = glob('*.txt');
 
и лучше переходить в диру, так как если указать с путем, то путь будет и в данных.
можно, конечно, в цикле все обрезать, но это по желанию
 

Цитата:
При этом присутствуют кв. кавычки и отсутствуют запятые.

какие запятые?? вы не путайте php код и отображение массива встроенными функциями.
 

Цитата:
Да и на выходе нужно получить:  

кто сказал, что нужно? что вы там выдумываете?
 
скажите зачем вам это нужно, чтобы не городить огород..
 
ps: хотите сохранить массив, чтобы потом его прочитать?  
так используйте www.php.net/serialize

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:38 26-08-2013 | Исправлено: Cheery, 22:59 26-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 

Цитата:
скажите зачем вам это нужно, чтобы не городить огород..  

 
Есть движок Xoops, у него весьма специфичная админка.
 
Сейчас пишу модуль под это "здрасте". Общий функционал готов, дался довольно легко. А вот конфигуратор модуля (для его общих настроек) весьма замороченный.
Так например одно из конфигурационных полей с выпадающей менюшкой выглядит так:

Код:
 
$i++;
$modversion['config'][$i]['name']        = 'sortcats';
$modversion['config'][$i]['title']       = '_MI_XTUBE_SORTCATS';
$modversion['config'][$i]['description'] = '_MI_XTUBE_SORTCATSDSC';
$modversion['config'][$i]['formtype']    = 'select';
$modversion['config'][$i]['valuetype']   = 'text';
$modversion['config'][$i]['default']     = 'title';
$modversion['config'][$i]['options']     = array(
    'Weight' => 'weight',
    'Title'  => 'title'
);
 

Но это статичная менюха, а мне нужна динамическая с содержанием папки.

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 08:05 27-08-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus
вы так не ответили зачем вам вывод массива должен выглядеть как массив в виде кода..
Цитата:
При этом присутствуют кв. кавычки и отсутствуют запятые.

зачем?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 08:15 27-08-2013
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В результате переменная с массивом должна выглядеть как в движке иначе движок ее не поймет и не отдаст:
Пример того что двигло понимает:

Код:
 
$modversion['config'][$i]['options']     = array(  
    'Weight' => 'weight',  
    'Title'  => 'title'  
);  
 

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

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 08:46 27-08-2013 | Исправлено: Grafus, 08:47 27-08-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » Помогите с php функцией.


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru