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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

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

Sanatory



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжаю разбираться с PHP...
Пишу скрипт, который скачивал бы файл в ответ на запрос (ссылку передаю в параметрах запроса). Не работает. Если указывать ту же ссылку, но уже в виде переменной в теле скрипта - всё срабатывает.
 
Примеры кода:
Рабочий
 
НЕ работает
 
Ссылка выглядит таким образом:
http://site/script.php?&files=https://downloader.disk.yandex.ru/disk/cac76a61954485fc56e9e8819cb38885e5526e2b7c7b67c3ab5f262184b3500e/592d911f/Jr3lRoM-Cug8QkiCden6fsJNXuVJvPH9aLlc3APeBYWDh_zVBxjkfkzetx9_fIwK-L-j9FA2_dWvmS_NsWAyTw%3D%3D?uid=0&filename=dpp1.7.2233.x86.portable%2829.05.17%29.exe&disposition=attachment&hash=%2B/qp2ITgWmJTmc13dyeLlcFYGrAY6WdYK8nME1eLyMs%3D%3A&limit=0&content_type=application%2Fx-msdownload&fsize=25466226&hid=ecf4ebd1f39f0faa1aa3e32909c750ff&media_type=executable&tknv=v2&nombre=dpp1.7.2233.x86.portable(29.05.17).exe
 
 
Подозреваю, проблема в "амперсандах", содержащихся в передаваемой ссылке. Но избавиться от них не получается.  
Пробовал передавать ссылку, предварительно пропустив через urlencode, а в скрипте декодировать её всячески. Не хочет работать и всё тут.

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 14:51 30-05-2017 | Исправлено: Sanatory, 14:59 30-05-2017
Mavrikii

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

Цитата:
Подозреваю, проблема в "амперсандах", содержащихся в передаваемой ссылке. Н

Именно
Все содержимое после files= должно быть представлено определённым образом
Чтобы было понятнее, вот описание к такой функции в js
http://javascript.ru/encodeuricomponent
Есть она и в php, а также можете преобразовать в онлайне http://pressbin.com/tools/urlencode_urldecode/
 
PS: после ? амперсанд не нужен
 

Цитата:
скрипте декодировать её всячески

Не нужно ничего декодировать, php делает это автоматически. Вернее сам http сервер декодирует и передаёт в php уже в нормальном виде.

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 16:05 30-05-2017 | Исправлено: Mavrikii, 16:10 30-05-2017
Sanatory



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

Цитата:
Не нужно ничего декодировать, php делает это автоматически

Ах вот оно что... Спасибо!
 

Цитата:
Все содержимое после files= должно быть представлено определённым образом
Чтобы было понятнее, вот описание к такой функции в js
http://javascript.ru/encodeuricomponent

Естественно, я всё это пробовал. Просто пытался потом декодировать - в PHP-скрипте, а этого не надо было делать, как оказалось.
 
В общем, спасибо, с этим разобрался.
 
Ещё один вопрос напоследок. Теперь файл скачивается, но расширение у него ".htm". Т. е. название имеет вид: dpp1.7.2233.x86.portable(29.05.17).exe.htm. Это можно как-то поправить?

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 17:16 30-05-2017 | Исправлено: Sanatory, 17:18 30-05-2017
Mavrikii

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

Цитата:
Это можно как-то поправить?

Ок, кодировать нужно все до &nobre, если хотите получить это значение в скрипте и это не является частью запроса к яндексу
Да, ещё желательно не делать скрипт публичным или ограничивать его, иначе найдутся злопыхатели.

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 19:08 30-05-2017
Sanatory



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

Цитата:
Ок, кодировать нужно все до &nobre, если хотите получить это значение в скрипте и это не является частью запроса к яндексу

Я так и делаю.  

Цитата:
Да, ещё желательно не делать скрипт публичным или ограничивать его, иначе найдутся злопыхатели.

Оно вестимо.  
 
Mavrikii, спасибо ещё раз за помощь! Фиг с ним, с расширением. Переименовать не проблема, в принципе. Ну пострадает немного мой внутренний перфекционист. Это даже полезно временами

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 19:19 30-05-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sanatory
добавьте еще вывод заголовка Content-Type: application/octet-stream
иначе php выдает по умолчанию что это html, поэтому так и получается

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 20:08 30-05-2017 | Исправлено: Mavrikii, 20:08 30-05-2017
Sanatory



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

Цитата:
добавьте еще вывод заголовка Content-Type: application/octet-stream
иначе php выдает по умолчанию что это html, поэтому так и получается  

Mavrikii, помогло. Мой внутренний перфекционист лучится счастьем и подпрыгивает от благодарности.
 

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 21:12 30-05-2017
Sanatory



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

Всего записей: 89 | Зарегистр. 21-04-2010 | Отправлено: 00:48 04-06-2017 | Исправлено: Sanatory, 13:28 14-06-2017
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите разобраться плз.
Получаю данные в цикле и заношу их в массив:
Подробнее...
Как в этом же цикле заменять данные в массивах следующими значениями:
samsung = 12
lg = 35
sony = 2
apple = 5

Всего записей: 1356 | Зарегистр. 14-03-2014 | Отправлено: 12:11 21-09-2017
Mavrikii

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

Код:
$replace = ['samsung' => 12, 'lg' => 35, 'sony' => 2, 'apple' => 5];
$data = [['apple', ''], ['sony', ''], ['samsung', ''], ['lg', '']];
foreach($data as &$tuple)
  foreach($tuple as $i => $val)
    if (isset($replace[$val])) $tuple[$i] = $replace[$val];
print_r($data);

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 18:40 21-09-2017
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо! Уже разобрался, конечно через костыли... Парсю тут сайт один с помощью phpquery, вот какой код наваял:
Читать дальше..

Всего записей: 1356 | Зарегистр. 14-03-2014 | Отправлено: 19:03 21-09-2017 | Исправлено: Kaber, 19:09 21-09-2017
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день всем.
Есть несколько , возможно тупых, вопросов:
где почитать о разделении сайта на клиентскую и серверную часть, что пихать на сервер а что обрабатывать на клиенте?
Вопрос в чем - я начал изучать пых по книге Робин Никсон - Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5, 3-е изд (О Рейли) - 2015
последняя глава, создается файлик с функциями php, проверка конекта  
<?php
.........
    $Connection = new mysqli($dbhost,$dbname,$dbpass,$dbname);
    if ($Connection->connect_error)die($Connection->connect_error);
 
ф-ция die выдаст страницу с ошибкой, что как я понимаю с точки зрения пользователя не совсем прикольно(возвращаться на предыдущую страницу) - как лучше реализовать отображение ошибок - всплывающее окно или еще как-то?

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 20:00 28-09-2017
Mavrikii

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

Цитата:
ф-ция die выдаст страницу с ошибкой, что как я понимаю с точки зрения пользователя не совсем прикольно(возвращаться на предыдущую страницу)

в идеале этого вообще не должно происходить.
 

Цитата:
как лучше реализовать отображение ошибок - всплывающее окно или еще как-то?  

выводите текст ошибки в любом виде, лишь в коде не выполняете все остальное, что связано с подключением.
 
а хотите сделать проще для себя - научитесь пользоваться исключениями (exception)
http://php.net/manual/ru/language.exceptions.php

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 20:02 28-09-2017 | Исправлено: Mavrikii, 21:14 28-09-2017
MagistrAnatol



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

Цитата:
в идеале этого вообще не должно происходить.  

Я ето понимаю, но возможна ситуация, примеру, что сайт ломанули и поменяли учетные данные для подключения к базе.
За ексепшины спасибо, они не отличаются по реализации от С++Builder.
Насколько я понял , - по принцыпу веб программирование мало отличается от десктопного - если работаешь с базой - на старте проверил конект - нету сказал всем до свидания.

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 07:26 29-09-2017
Mavrikii

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

Цитата:
если работаешь с базой - на старте проверил конект - нету сказал всем до свидания.  

в принципе - да. но если запросы или выполнение скрипта долгие, то что то может случиться и между ними )

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 07:28 29-09-2017
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Просто для меня не совсем понятно что кидать на сервер а что на клиента.
По примерам книги, делается нормализация вводимых даных как на клиенте на js так и на сервере -
ето так надо? двойная валидация?

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 07:39 29-09-2017
Mavrikii

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

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

вопрос непонятен... что значит "что кидать на сервер"?
php выполняется на сервере, результат его работы выдается клиенту. js тоже выполняется у клиента, поэтому что и куда бросать? выполняется php, формирует страницу. если возникла какая то ошибка в процессе - сообщение о ней вставляется в создаваемый скриптом вывод (html код) вместо того, что выдалось бы в случае нормальной работы.
 

Цитата:
ето так надо? двойная валидация?

желательно. на стороне клиента в js чтобы лишний раз не отправлять данные, на стороне сервера всегда - нельзя доверять данным от клиента.

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 07:44 29-09-2017
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
Спасибо.

Цитата:
вопрос непонятен... что значит "что кидать на сервер"?  

Что реализуется на сервере, на пхп, а что на клиенте на ява скрипте?
 

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 16:20 02-10-2017
Mavrikii

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

Цитата:
Что реализуется на сервере, на пхп, а что на клиенте на ява скрипте?  

на js - ничего, зависит от вас.. хотите ли выводить что то пользователю с его помощью или делаете ajax запрос к серверу.
 

Цитата:
Что реализуется на сервере, на пхп

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

Всего записей: 15118 | Зарегистр. 20-09-2014 | Отправлено: 20:19 02-10-2017 | Исправлено: Mavrikii, 20:21 02-10-2017
Kaber



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Просьба помочь, никак не разберусь ((
Не могу понять, почему не ищет по базе:

Код:
 
<?
header('Content-type: text/html; charset=windows-1251');
 
    $db = new mysqli('localhost', 'root', '', 'open');
    $db->query("SET NAMES cp1251");
 
    $name_select = "Экран";
 
     //$query = "SELECT * FROM `table` WHERE `name`='$name_select'";
 
     //echo $query;
 
    $result = $db->query("SELECT * FROM `oc_category_description` WHERE `name`='$name_select'");
 
        while($row = $result->fetch_array())
        {
            var_dump($row);
        }    
 

 
Наверное все уже перепробовал, в том числе - менял в дампе базы кодировку, менял на сервере mysql кодировку и т.д.
 
Добавлено:
Вот сама таблица:
oc_category_description | 4 | MyISAM | cp1251_general_ci | 2.1 КиБ    

Всего записей: 1356 | Зарегистр. 14-03-2014 | Отправлено: 15:14 03-10-2017 | Исправлено: Kaber, 15:17 03-10-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

Компьютерный форум 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