PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (31): В начало « ... 6 7 8 9 [10] 11 12 13 14 ... » В конец

> Найдено сообщений: 463
Prizma Отправлено: 04 Января, 2016 - 00:54:23 • Тема: Как вытащить из Json определенное значение? • Форум: Вопросы новичков

Ответов: 14
Просмотров: 590
А теперь, как надо? если нет, тогда нарисуй как тебе надо или объясни человеческим языком конкретно что да как) а то я додумываю половину потому что нечего не понятно, что нужно))
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/city-directions?origin=MOW&token=xxxxxxx&limit=10");
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  5. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  6. curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: xxxxxx"));
  7. $response = curl_exec($ch);
  8.  
  9. $json=json_decode($response,true);
  10. ?>
  11. <?PHP
  12.  
  13. function loadValues($origin, $limit = 10)
  14. {
  15.     if ($data = file_get_contents(sprintf('http://api.travelpayouts.com/v1/city-directions?origin=%s&token=xxxxxxx&limit=%s', $origin, $limit))) {
  16.         $data = json_decode($data);
  17.         if ($data->success && !empty($data->data)) {
  18.             $data = $data->data;
  19.         } else {
  20.             die('not access or empty data');
  21.         }
  22.     } else {
  23.         die('error 1');
  24.     }
  25.     $re = [
  26.         'airline'=>[],
  27.         'origin'=>[],
  28.         'destination'=>[]
  29.     ];
  30.     foreach($data as $v) {
  31.         $re['airline'][] = $v->airline;
  32.         $re['origin'][] = $v->origin;
  33.         $re['destination'][] = $v->destination;
  34.     }
  35.     return $data;
  36. }
  37.  
  38. $products = json_decode($response, true);
  39.  
  40. foreach ($products as $key => $value) {
  41.     echo "<table class='mytable'><hr>";
  42.     foreach ($value as $k=> $v) {
  43.         echo "<tr><td><br>".$k."</td><td></td></tr>";
  44.         $values = loadValues($v->origin);
  45.         foreach ($v as $g=> $l) {
  46.             switch($g) {
  47.                 case 'airline':
  48.                     $l = implode('<br>', $values[$g]);
  49.                     break;
  50.                 case 'origin':
  51.                     $l = implode('<br>', $values[$g]);
  52.                     break;
  53.                 case 'destination':
  54.                     $l = implode('<br>', $values[$g]);
  55.                     break;
  56.             }
  57.             $g=str_replace ('price','цена',$g);
  58.             $g=str_replace ('airline','авиакомпания',$g);
  59.             $g=str_replace ('origin','город вылета',$g);
  60.             $g=str_replace ('destination','город прилета',$g);
  61.             $g=str_replace ('transfers','кол-во пересадок',$g);
  62.             $g=str_replace ('flight_number','номер рейса',$g);
  63.             $g=str_replace ('departure_at','дата вылета',$g);
  64.             $g=str_replace ('return_at','дата возвращения',$g);
  65.             $g=str_replace ('expires_at','Срок истечения актуальности цены',$g);
  66.  
  67.             echo "<tr><td>".$g."</td><td>".$l."</td></tr>";
  68.         }
  69.     }
  70.     echo "</table>";
  71. }
  72.  
  73. ?>
Prizma Отправлено: 04 Января, 2016 - 00:23:21 • Тема: Как вытащить из Json определенное значение? • Форум: Вопросы новичков

Ответов: 14
Просмотров: 590
Аркадий пишет:
Prizma пишет:
Аркадий пишет:
Сейчас вот

ну) всё работает, в чем проблема? свое значение на которое заменить хочешь напиши в кавычка вместо моего текста...

Дело в том что это значение должно браться от сюда из ответ АПИ
CODE (html):
скопировать код в буфер обмена
  1. http://api.travelpayouts.com/v1/city-directions?origin=MOW&token=xxxxxxx&limit=10

Вот такого вида ответ
CODE (htmlphp):
скопировать код в буфер обмена
  1.     {"success": true, "data": [{"show_to_affiliates":false,"trip_class":0,"origin":"PEN","destination":"KUL","depart_date":"2016-04-11","return_date":"2016-04-14","number_of_changes":0,"value":983,"found_at":"2016-01-03T18:33:11+04:00","distance":286,"actual":true},{"show_to_affiliates":false,"trip_class":0,"origin":"DRM","destination":"PTT","depart_date":"2016-04-11","return_date":"2016-04-14","number_of_changes":0,"value":983,"found_at":"2016-01-03T18:33:11+04:00","distance":286,"actual":true}

весь массив значений в ответ или какое то одно конкретное?
Prizma Отправлено: 04 Января, 2016 - 00:14:53 • Тема: Как вытащить из Json определенное значение? • Форум: Вопросы новичков

Ответов: 14
Просмотров: 590
Аркадий пишет:
Сейчас вот

ну) всё работает, в чем проблема? свое значение на которое заменить хочешь напиши в кавычка вместо моего текста...
Prizma Отправлено: 04 Января, 2016 - 00:03:21 • Тема: Как вытащить из Json определенное значение? • Форум: Вопросы новичков

Ответов: 14
Просмотров: 590
Аркадий пишет:
Все правильно, только вот значения не получил.

значит данные не верные, ты мне скидываешь какой то левый json. Я писал под те данные которые указал в посте. Если в $responce иные данные то нечего работать не должно.

Вот так попробуй:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/city-directions?origin=MOW&token=xxxxxxx&limit=10");
  4. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  5. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  6. curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: xxxxxx"));
  7. $response = curl_exec($ch);
  8.  
  9. $json=json_decode($response,true);
  10. ?>
  11. <?PHP
  12. $products=json_decode($response,true);
  13.  
  14. foreach ($products as $key => $value) {
  15.     echo "<table class='mytable'><hr>";
  16.     foreach ($value as $k=> $v) {
  17.         echo "<tr><td><br>".$k."</td><td></td></tr>";
  18.         foreach ($v as $g=> $l) {
  19.             switch($g) {
  20.                 case 'airline':
  21.                     $l = 'Новое значение';
  22.                     break;
  23.                 case 'origin':
  24.                     $l = 'Новое значени origin';
  25.                     break;
  26.                 case 'destination':
  27.                     $l = 'Новое значени destination';
  28.                     break;
  29.             }
  30.             $g=str_replace ('price','цена',$g);
  31.             $g=str_replace ('airline','авиакомпания',$g);
  32.             $g=str_replace ('origin','город вылета',$g);
  33.             $g=str_replace ('destination','город прилета',$g);
  34.             $g=str_replace ('transfers','кол-во пересадок',$g);
  35.             $g=str_replace ('flight_number','номер рейса',$g);
  36.             $g=str_replace ('departure_at','дата вылета',$g);
  37.             $g=str_replace ('return_at','дата возвращения',$g);
  38.             $g=str_replace ('expires_at','Срок истечения актуальности цены',$g);
  39.  
  40.             echo "<tr><td>".$g."</td><td>".$l."</td></tr>";
  41.         }
  42.     }
  43.     echo "</table>";
  44. }
  45.  
  46. ?>
Prizma Отправлено: 03 Января, 2016 - 23:41:03 • Тема: Как вытащить из Json определенное значение? • Форум: Вопросы новичков

Ответов: 14
Просмотров: 590
Задача:
Аркадий пишет:
Мне нужно, чтобы из Json заменялись значения:
'airline', 'origin', 'destination',

Данные:
CODE (javascript):
скопировать код в буфер обмена
  1. {
  2.     "success":true,
  3.     "data":
  4.     [{
  5.         "show_to_affiliates": false,
  6.         "trip_class": 0,
  7.         "origin": "PEN",
  8.         "destination": "KUL",
  9.         "depart_date": "2016-04-11",
  10.         "return_date": "2016-04-14",
  11.         "number_of_changes": 0,
  12.         "value": 983,
  13.         "found_at": "2016-01-03T18:33:11+04:00",
  14.         "distance": 286,
  15.         "actual": true
  16.     }]
  17. }

Ну например вот так:
PHP:
скопировать код в буфер обмена
  1. $products=json_decode($response,true);
  2.  
  3. $keysRU = [
  4.     'price'=>'цена',
  5.     'airline'=>'авиакомпания',
  6.     'origin'=>'город вылета',
  7.     'destination'=>'город прилета',
  8.     'transfers'=>'кол-во пересадок',
  9.     'flight_number'=>'номер рейса',
  10.     'departure_at'=>'дата вылета',
  11.     'return_at'=>'дата возвращения',
  12.     'expires_at'=>'Срок истечения актуальности цены'
  13. ];
  14.  
  15. foreach ($products as $key => $value) {
  16.     echo "<table class='mytable'><hr>";
  17.     foreach ($value as $k=> $v) {
  18.         echo "<tr><td><br>".$k."</td><td></td></tr>";
  19.        
  20.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['price'], $v->price);
  21.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['airline'], $v->airline); // меняешь значение на любое другое
  22.         /**
  23.          * Например так:
  24.          * echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['airline'], "Новое значение");
  25.          */
  26.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['origin'], $v->origin);
  27.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['destination'], $v->destination);
  28.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['transfers'], $v->transfers);
  29.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['flight_number'], $v->flight_number);
  30.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['departure_at'], $v->departure_at);
  31.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['return_at'], $v->return_at);
  32.         echo sprintf("<tr><td>%s</td><td>%s</td></tr>", $keysRU['expires_at'], $v->expires_at);
  33.        
  34.        
  35.     }
  36.     echo "</table>";
  37. }
Prizma Отправлено: 03 Января, 2016 - 23:24:00 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 439
lawer85 пишет:
Я об этом не подумал. Спасибо за совет. Хотя по-моему это будет влиять не на саму работу скрипта, а скорее на внешний вид что ли. Т.е. будем работать с привычными цифрами 1 2 вместо 01 02

во первых числами, а во вторых нету числа 01 ... зато есть строка '01' приводимая в данном выражении при сравнении к числу 1.

Просто не логично сравнивать одну строку с другой оператором ">=", когда обе строки будут приведены к числу и ноль с кавычками с самого начала нечего не значат. Собственно точно так же можно не использовать ltrim все равно число будет приведено одинаково.
Prizma Отправлено: 03 Января, 2016 - 23:14:44 • Тема: Как вытащить из Json определенное значение? • Форум: Вопросы новичков

Ответов: 14
Просмотров: 590
1. все ссылки на json файлы защищены и мы их не видим.
2. В твоей таблице на скрине вроде все ок - я не вижу там слов 'airline', 'origin', 'destination' ...

Если тебе надо изменить сам json то можно сделать replace перед json_decode и будет тебе счастье... как то так:
PHP:
скопировать код в буфер обмена
  1. $ch = curl_init();
  2. curl_setopt($ch, CURLOPT_URL, "http://api.travelpayouts.com/v1/city-directions?origin=MOW&token=xxxxxxx&limit=10");
  3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  4. curl_setopt($ch, CURLOPT_HEADER, FALSE);
  5. curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-Access-Token: xxxxxx"));
  6. $response = curl_exec($ch);
  7.  
  8. $json=json_decode($response,true);
  9.  
  10.  
  11. $g = $response;
  12.  
  13. $g=str_replace ('price','цена',$g);
  14. $g=str_replace ('airline','авиакомпания',$g);
  15. $g=str_replace ('origin','город вылета',$g);
  16. $g=str_replace ('destination','город прилета',$g);
  17. $g=str_replace ('transfers','кол-во пересадок',$g);
  18. $g=str_replace ('flight_number','номер рейса',$g);
  19. $g=str_replace ('departure_at','дата вылета',$g);
  20. $g=str_replace ('return_at','дата возвращения',$g);
  21. $g=str_replace ('expires_at','Срок истечения актуальности цены',$g);
  22.  
  23. $products=json_decode($g,true);
  24.  
  25. foreach ($products as $key => $value) {
  26.     echo "<table class='mytable'><hr>";
  27.     foreach ($value as $k=> $v) {
  28.         echo "<tr><td><br>".$k."</td><td></td></tr>";
  29.         foreach ($v as $g=> $l) {
  30.             echo "<tr><td>".$g."</td><td>".$l."</td></tr>";
  31.         }
  32.     }
  33.     echo "</table>";
  34. }
  35.  
Prizma Отправлено: 03 Января, 2016 - 23:01:01 • Тема: Вопрос к опытным кураторам • Форум: Вопросы новичков

Ответов: 7
Просмотров: 271
Мелкий пишет:
Вот смотрю я на это и не понимаю. Не, пароль повесить можно. Но выключить сервер-то тогда эффективнее будет. Никакая атака сразу не страшна.
Если что - бэкенд - это любая серверная логика. Например, любой вызов php. GET / через index.php, например.
Положить ddos'ом фронтенд тоже можно, но nginx штука быстрая и надо хорошо постараться. Бэкенд проще. Многим хватит всего лишь пары сотен rps чтобы лечь отдохнуть.

Окей согласен все не закроешь) да и не стоит оно того гемора больше будет.
100-200 rps это будет точно неприятно, я говорил про те страницы которые можно положить в 3-ое меньшим количеством запросов и менее, всё что выше надо отсекать на уровне http-сервера... а вот алгоритмы уже там самые разные сколько запросов считать нормой, а сколько атакой это уже от проекта зависит.

На ресурсоемкие операции доступные всем пользователям надо точно ставить ограничение на кол-во обращений (все что выше отсекать) или капчу
Prizma Отправлено: 03 Января, 2016 - 22:21:46 • Тема: Вопрос к опытным кураторам • Форум: Вопросы новичков

Ответов: 7
Просмотров: 271
Мелкий пишет:
Шаред-то? Роняется элементарно родным же биллингом. Дать чуток нагрузки на бэкенд и привет письмам счастья "ваш аккаунт заблокирован за повышенную нагрузку". А если не повезёт - потом ещё двое суток бодаться с саппортом, доказывая что не верблюд и загрузка cpu под 1500% против типичных 5% посреди ночи - это атака, а не нормальное положение дел для мелкого местного магазина. Был у меня такой случай года 4 назад, когда последний раз видел шаред.
Но от UDP и TCP syn флуда прикроют, да. Там непонятно, кого именно атакуют.

1. Нормальный хостинг ограничивает выделенные тебе ресурсы. Иногда нужно запускать скрипты требующие значительных ресурсов на продолжительное время, не ловил банов и обращений от хостера по поводу нагрузки (может время было не настолько продолжительное или еще что), однако всё, что лежало моего на этом хостинге было недоступно пока не выполнился процесс до конца и не освободил ресурсы (и дело не в ограничении потоков, а именно в том, что все ресурсы сервера за которые было заплачено были задействованы)
2. Бекэнд можно защитить через тот же .htaccess логин пароль если такой случай будет иметь место быть
3. А что сапы не правы? ты не защитил страницу которая создает нагрузку на сервер, внешнего высокого трафика не было, значит как не крути вина твоя
Prizma Отправлено: 03 Января, 2016 - 22:09:03 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 439
lawer85 пишет:
Вы не поняли. Скрипт не работает 24 часа в сутки. Скрипт заполняет БД разными действиями сотрудников и этих действий от 10 до 600 и каждое выполняется от 5 минут до 5 часов. Из скрипта видно что кол-во действий и время на выполнение берется рандомно. Поэтому идет речь о сутках(24 часа). Другими словами мы за несколько дней можем заполнить БД данными.

lawer85 пишет:
if(($d >= '00' && $d < '09') || $d >= '22'){
                        foreach($rest as $key => $value){
                                if($d == $key){
                                        $time += $value;
                                        $date = date("Y-m-d H:i:s", $time);
                                }      
                        }
                }else{
                        $date = date("Y-m-d H:i:s", $time);
                        echo $date."<br />";
                }

Понятно, тебе нужно все лишь что бы значение timestamp в поле `created_at` принимало значения в диапозоне от 9 до 23 часов. Вот только, что за реализация такая интересная.. Возможно она и работает но лучше написать в условии, наверно вот так:
PHP:
скопировать код в буфер обмена
  1. $d = ltrim(date("H", $time), '0');
  2. if((($d >= 0) && ($d < 9)) || ($d >= 22)) {
  3.     /* ... */
  4. }
Ну и собственно вопрос должен был звучать как то так, чтобы его поняли правильно:
Помогите составить условие для if, ...
Prizma Отправлено: 03 Января, 2016 - 21:48:44 • Тема: Битовая маска реализация в классе • Форум: Вопросы новичков

Ответов: 3
Просмотров: 281
Мелкий пишет:
E_ALL = PHP_INT_MAX
E_ALL = -1

да точно, совсем забыл про волшебные константы и про методы хранение целых отрицательных чисел.
Спасибо
Prizma Отправлено: 03 Января, 2016 - 04:23:06 • Тема: Ограничение времени выполнения цикла • Форум: Вопросы новичков

Ответов: 10
Просмотров: 439
Возможно я идиот... но все же

1. Почему проверка в цикле?? у вас скрипт будет выполняться 24 часа в сутки? (тогда вопрос, как это возможно, я даже с set_time_limit(0) выжимал около 15-20 минут... Возможно изменить настройки сервера можно разогнать его до unlimited? (это вопрос - интересно)
2. Ладно пусть в цикле, но черт возьми почему проверки в конце и где остановка?
3. Раз остановки нет, не знаю сколько у вас записей в таблице contacts, но все же если предположить, что их очень много, то даже добавив к проверке остановку, все равно скрипт продолжит парсить contacts и не прервется пока первый цикл не переберет всю таблицу.

Я не спрашиваю зачем, могу предположить, что задание в вузе или ставите какой то эксперимент или это вообще просто пример, а реализация будет в ином месте...


lawer85 пишет:
Есть цикл, который наполняет БД случайным образом действиями сотрудников.

Мне нужно, чтобы скажем c 22:00 до 09:00 данные не добавлялись, что-то вроде отдыха.

если бы не смотрел на вашу реализацию сделал бы как то так:
PHP:
скопировать код в буфер обмена
  1. // возващает true если пора отдыхать
  2. function isTimeToSleep() {
  3.     $d = date("H", $time);
  4.     return (($d >= 0 && $d < 9) || $d >= 22);
  5. }
  6.  
  7. // прерываем скрипт там где надо
  8. if(isTimeToSleep()) {
  9.     /* делаем все что надо перед завершением, если надо */
  10.     die;
  11.     /* вместо die можно использовать sleep сделав расчет времени до утра и тогда ровно в 9:00 он продолжит пахать с того места где остановился) */
  12. }
Prizma Отправлено: 03 Января, 2016 - 03:18:52 • Тема: Вопрос к опытным кураторам • Форум: Вопросы новичков

Ответов: 7
Просмотров: 271
ReDDy пишет:
Что посоветуете для старта?

1. Заказать хостинг именно этого региона или можно другого? Ведь скорость загрузки, зависит от физического местонахождения сервера.
1.2 Или лучше запустить на дому? Есть хорошие статьи по этому поводу и ссылки на источники?

2. Как справляется с DDoS-атаками?
Есть хорошие статьи по этому поводу, web-ресурсы или php скрипты?
2.1 Как понять вообще, ведётся ли DDoS атака на сервер или нет? Я очень слаб в данной сфере.т

3. Как начать раскрутку и создать начальную рекламную кампанию? Как стартовать со стороны рекламы вообще?

4. На своё усмотрение

1. Зависит от бюджета, если тратиться не хочешь и аудитория не велика можно взять любой стабильный хостинг для начала, позже при росте популярности взять свой сервер если понадобятся мощности. А так хостинг и от DDOS атак защищен и настраивать тебе его не надо если не умеешь, дома не рекомендую, дороже выйдет ;)

2. DDOS атака это как пробка на трассе, чем шире трасса тем сложнее создать пробку)) Однако это далеко не все, существует множество механизмов защиты от DDOS на разных уровнях, тут уже если у тебя все таки будет свой сервер придется почитать подходящей литературы для его настройки.

2.1/2. DDOS это не самое страшное для стартапа, вот дырки в проекте которые начнут вылезать на разных этапах, особенно при нагрузке (которая может быть вовсе не из-за DDOS атаки, а из-за не разумного распределения ресурсов при написании движка).

2.1. Резкий рост трафика с сервером думаю главный фактор)

3. Региональная реклама в в yandex.direct и google.adwords думаю будет слишком дорога для соцсети ... даже не знаю в этом обычно и есть вся трудность)) ну если много денег можно обратится в рекламное агенство, результат напрямую будет зависить от того, что ты будешь предлагать людям интересно им это или нет

4. Удачи, думаю, что прежде чем брать сервер, стоит сначала найти первую аудиторию и отладить запущенный проект на обычном хостинге
(Добавление)
Сразу пока не полетели камни или чтобы мои слова не воспринимали слишком серьещно, как от того кому задавался вопрос скажу... крупных проектов не курирую, мои проекты пока растут))
Prizma Отправлено: 03 Января, 2016 - 03:01:18 • Тема: Битовая маска реализация в классе • Форум: Вопросы новичков

Ответов: 3
Просмотров: 281
Добрый день, с Новым Годом.

Вопрос следующий возник, у меня есть класс:
PHP:
скопировать код в буфер обмена
  1.  
  2. namespace Core\System;
  3.  
  4. class ErrorTypes
  5. {
  6.     const FATAL_ERROR = 1;
  7.     const DATA_ERROR = 2;
  8.     const NO_ANSWER = 4;
  9.     const ANSWER_NOT_DETECTED = 8;
  10.     const NEGATIVE_ANSWER = 16;
  11.     const E_ALL = /*16 + 8 + 4 + 2 + 1 */
  12. }

т.к. стадия разработки типов ошибок будет больше и хочется их все красиво реализовать в классе. Чтобы потом удобно писать код (IDE phpstorm), выражение при определении константы без использования define использовать нельзя, а каждый раз в E_ALL добавлять следующий бит +32/64/128.. не очень хочется. Может есть более элегантный способ? или нет? (все должно быть прозрачно для IDE чтобы при вызове класса сразу можно было выбрать тип ошибки, добавить константу в класс после его определения не предлагать)

Раньше не использовал битовые маски, возможно я не что то не так делаю, может уже есть что то встроенное предуманное для этого дела?
Prizma Отправлено: 13 Июня, 2015 - 15:02:30 • Тема: Расшифровка формата unicode • Форум: Вопросы новичков

Ответов: 4
Просмотров: 434
Нашел несколько вариантов решения:

Вариант 1
функция utf8_decode(); шикарно справляется с той строкой

Вариант 2
Библиотека jQuery которая не переводит символы в формат unicode, собственно она ругается, но если заклеить ей рот скотчем (закоментить ругающиеся места) вполне себе такой же результат https://github[dot]com/carlo/jquery-base64

Однако проблема не решена!

Просто теперь она немного изменилась. Начну с самого начала.
Снизу тестовая страничка которая в теории должна с помощью ajax подгрузить изображение (бинарный файл) и отправить его на некий другой сервер в любом виде который бы поддавался расшифровке - собственно это и есть задача. Главным условием является, что с этого сервера получить доступ к этому изображению невозможно вообще для простоты можно считать, что его ip-адрес в черном списке.
CODE (htmlphp):
скопировать код в буфер обмена
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  6. <script>
  7. function base64_encode( data ) {
  8.    data = escape(data);
  9.    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  10.    var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
  11.    do { // pack three octets into four hexets
  12.        o1 = data.charCodeAt(i++);
  13.        o2 = data.charCodeAt(i++);
  14.        o3 = data.charCodeAt(i++);
  15.        bits = o1<<16 | o2<<8 | o3;
  16.        h1 = bits>>18 & 0x3f;
  17.        h2 = bits>>12 & 0x3f;
  18.        h3 = bits>>6 & 0x3f;
  19.        h4 = bits & 0x3f;
  20.        // use hexets to index into b64, and append result to encoded string
  21.        enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
  22.    } while (i < data.length);
  23.    switch( data.length % 3 ){
  24.        case 1:
  25.            enc = enc.slice(0, -2) + '==';
  26.        break;
  27.        case 2:
  28.            enc = enc.slice(0, -1) + '=';
  29.        break;
  30.    }
  31.    return enc;
  32. }
  33.  
  34. var data;
  35. $(document).ready(function() {
  36.    $('#button').click(function(){
  37.                
  38.                 $.ajax({
  39.                         url: '/images/1.jpg',
  40.                         contentType: 'application/x-www-form-urlencoded',
  41.                         async: false,
  42.                         success: function(msg){
  43.                                 data = msg;
  44.                         }
  45.                 });
  46.                
  47.                
  48.                 //data = $.base64.encode(data);
  49.                 data = base64_encode(data);
  50.                 alert(data.length+"\r\n"+data);
  51.                
  52.        $.ajax({
  53.                         contentType: 'application/x-www-form-urlencoded',
  54.            type: 'POST',
  55.            url: 'http://mysite.ru/scripts/image.php',
  56.            data: 'img='+data,
  57.            success: function(msg){
  58.              alert(msg);
  59.            },dataType: "text"});
  60.    });
  61. });
  62. </script>
  63. <script type="text/javascript" src="/js/jquery-base64.js"></script>
  64. </head>
  65. <body>
  66. <div id="img">
  67.   <img src="/images/1.jpg">
  68. </div>
  69. <a href="#" id="button">Отправить</a>
  70. </body>
  71. </html>

(Добавление)
кажестся нашел что искал... изучаю http://habrahabr[dot]ru/post/120917/
(Добавление)
Короче говоря, я мучался как мог... все было просто.... решение ниже:

Отправка бинарного файла в формате '22|26|222|38|...'
CODE (html):
скопировать код в буфер обмена
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  6. <script type="text/javascript" src="/js/JsHttpRequest.js"></script>
  7. <script>
  8. function base64_encode( data ) {
  9.     data = escape(data);
  10.     var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  11.     var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
  12.     do { // pack three octets into four hexets
  13.         o1 = data.charCodeAt(i++);
  14.         o2 = data.charCodeAt(i++);
  15.         o3 = data.charCodeAt(i++);
  16.         bits = o1<<16 | o2<<8 | o3;
  17.        h1 = bits>>18 & 0x3f;
  18.         h2 = bits>>12 & 0x3f;
  19.         h3 = bits>>6 & 0x3f;
  20.         h4 = bits & 0x3f;
  21.         // use hexets to index into b64, and append result to encoded string
  22.         enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
  23.     } while (i < data.length);
  24.    switch( data.length % 3 ){
  25.        case 1:
  26.            enc = enc.slice(0, -2) + '==';
  27.        break;
  28.        case 2:
  29.            enc = enc.slice(0, -1) + '=';
  30.        break;
  31.    }
  32.    return enc;
  33. }
  34.  
  35.  
  36. var xhr = new XMLHttpRequest();
  37. xhr.open('GET', '/images/1.jpg', true);
  38. // Хак для того, чтобы байты были переданы неизменными
  39. xhr.overrideMimeType('text/plain; charset=x-user-defined');
  40. xhr.onreadystatechange = function(e) {
  41.         if (this.readyState == 4 && this.status == 200) {
  42.                 var data = '';
  43.                 var binStr = this.responseText;
  44.                 for (var i = 0, len = binStr.length; i < len; ++i) {
  45.                         var c = binStr.charCodeAt(i);
  46.                         String.fromCharCode(c & 0xff);
  47.                         data += (c & 0xff)+'|';
  48.                 }
  49.                
  50.                 /* ... */
  51.        $.ajax({
  52.                         //contentType: 'text/plain',
  53.            type: 'POST',
  54.            url: 'http://ppd.ru/scripts/image.php',
  55.            data: 'img='+data,
  56.            success: function(msg){
  57.              alert(msg);
  58.            },dataType: "text"});
  59.                 /* ... */
  60.         }
  61. };
  62. </script>
  63. </head>
  64. <body>
  65. <div id="img">
  66.   <img src="/images/1.jpg">
  67. </div>
  68. <a href="#" id="button">Отправить</a>
  69. </body>
  70. </html>


получение изображения на сервере:
PHP:
скопировать код в буфер обмена
  1. header('Content-type:image/jpeg');
  2. $str = $r['img'];
  3. $str = trim($str,'|');
  4. $strs = explode('|',$str);
  5.  
  6. foreach($strs as $byte){
  7.         $b = $byte*1;
  8.         echo chr($b);
  9. }


пойду завтракать, а то провтыкал с этой фигней пол ночи, все утро и начало дня
(Добавление)
IllusionMH пишет:
Prizma, atob переводит из base64 который имеет ограниченный набор символов в данные. btoa - наоборот, кодирует данные в base64. Использовать нужно его, иначе будет вылетает тот эксепшн с неверными символами которых нет в base64

этот вариант тоже пробывал вот в эти самые символы и уткнулся... куда от них денешься...

Страниц (31): В начало « ... 6 7 8 9 [10] 11 12 13 14 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB