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

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

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

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

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

maxus5578

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

Код:
 
function bdec_file($f, $ms) {
$fp = fopen($f, "rb");
if (!$fp)
return;
$e = fread($fp, $ms);
fclose($fp);
return bdec($e);
}
 

К некоторым серверам данный метод не подходит и выдает  
failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden\r\n
 
Я плохо знаю php, и хочу открыть файл средством curl
Как это сделать?
Получить файл я могу,а как его открыть?

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 23:27 26-10-2013 | Исправлено: maxus5578, 23:29 26-10-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578
не нужно дублировать темы - я же указал, где нужно спрашивать/смотреть
PHP: Закачка файлов с определённого сайта на сервер
 

Цитата:
К некоторым серверам данный метод не подходит и выдает  

потому что данный способ не выдает всех заголовков, типичных для браузера.
он вообще минимален в этом смысле, поэтому, в зависимости от настроек удаленного сервера, реакция может быть неоднозначной. я же написал, что лучше использовать curl для этого.
 
curl код, что вы привели, отлично работает - проверил у себя.
раз var_dump($result); после присвоения результатов переменной $result не показывает ничего, значит у вас выполнение кода дотуда не доходит.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:42 26-10-2013 | Исправлено: Cheery, 23:48 26-10-2013
maxus5578

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

Цитата:
раз var_dump($result); после присвоения результатов переменной $result не показывает ничего, значит у вас выполнение кода дотуда не доходит.

Там был else, я его не заметил поэтому и не доходило.
Я написал так, но не фурычит  

Код:
 
$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$_GET['torrent']);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.1) Gecko/20090624 Firefox/3.5');
    curl_setopt($ch, CURLOPT_NOBODY, 0);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        curl_setopt($ch, CURLOPT_AUTOREFERER, true);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);
$f = $_GET['torrent'];
function bdec_file($f, $ms) {
$fp = fopen($f, "rb");
if (!$fp)
return;
$e = fread($fp, $ms);
fclose($fp);
return bdec($e);
}
 

ту стр что вы мне дали, я не понимаю что мне откуда взять что бы заставить работать код

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 00:05 27-10-2013
Cheery



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

Цитата:
Я написал так, но не фурычит  

не "фурычит" что?? что вы делаете с $result? ну получили вы его, а дальше что?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:07 27-10-2013
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
я не знаю, говорю этот код использовал везде, и везде работало.А тут я не знаю что подправить. Я вообще впервые столкнулся с открытием и чтением файлов.Поэтому я не знаю что и как правильно работает.
 
Добавлено:

Цитата:
не "фурычит" что??

страница грузится, и после просто перестает дальше грузиться и не чего не выдает

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 00:21 27-10-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578
да елки палки..  
ну вот вы получили удаленный файл в
Цитата:
 $result = curl_exec($ch);  

дальше что??  
вы же ничего с этими данными не делаете.
 
 
вот после этой строки, var_dump($result); выдаст на странице содержимое полученных данных?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:23 27-10-2013 | Исправлено: Cheery, 00:25 27-10-2013
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
выдаст, но оно выдало кишки, как вывести именно файл??

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 00:36 27-10-2013
Cheery



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

Цитата:
как вывести именно файл??

"вывести" куда? что вы хотите с содержимым сделать?

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:37 27-10-2013
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
что бы при заходе на стр, скачать его сразу, помню что нужен header, я ставил, но кажется нельзя ставить  header ниже var_dump

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 00:41 27-10-2013
Cheery



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

Цитата:
но кажется нельзя ставить  header ниже var_dump

var_dump нужен только для дебага скрипта.
 
header должен быть до вывода чего либо в браузер.
сначала нужный header, затем echo $result, если файл получен без ошибки

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:42 27-10-2013
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
возникла еще одна проблема.
Как только я получил файл,
после установил header
и выдал $result
но ниже у меня огроменный код который редактирует этот файл.
И так происходит что я выдаю $result и файл не доходит до редактора,и остается не измененным.

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 00:58 27-10-2013
Cheery



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

Цитата:
но ниже у меня огроменный код который редактирует этот файл.  
И так происходит что я выдаю $result и файл не доходит до редактора,и остается не измененным.

ну так выводите после этого.. откуда же я знаю, что вы хотите делать с полученными данными

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:19 27-10-2013
maxus5578

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

Код:
 
curl_close($ch);
    }
    $fn = uSiteGet($_GET['torrent']);
    require_once "benc.php";
    $dict = bdec_file($fn, (1024*1024));
 

завершаю curl
и начинаю редактирование
по идее uSiteGet($_GET['torrent']) должен содержать данные из файла, но он будто пропускает всю форму редактирование файла и выполняет  
print(benc($dict));
 
    exit();    
и все остается без изменений

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 01:26 27-10-2013
Cheery



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

Цитата:
должен содержать данные из файла

откуда?? содержимое скачанного файла находится в переменной $result.
вы же в этом аргументе передаете ссылку на файл, который и скачали с помощью curl.
если код скачивания находится в функции uSiteGet, то показывайте целиком..  
я уже по куску
Цитата:
curl_close($ch);  
    }  

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

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:31 27-10-2013 | Исправлено: Cheery, 01:33 27-10-2013
maxus5578

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

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 01:33 27-10-2013
Cheery



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

Цитата:
я хочу сделать задуманное,но не выходит на практике.

остальные не умеют читать ваши мысли, чтобы по обрывкам кода там и тут понять, что вы задумали.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:34 27-10-2013
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я новичок, что увидел и сработало в прошлый раз делаю в этот раз.В других кодах я делал также сначала функция uSiteGet, после uSiteGet($_GET['torrent']);  

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 01:35 27-10-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578
Да прекратите же воду лить ни о чем..  
покажите свою функцию uSiteGet целиком.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:36 27-10-2013
maxus5578

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я новичок, что увидел и сработало в прошлый раз делаю в этот раз.В других кодах я делал также сначала функция uSiteGet, после uSiteGet($_GET['torrent']);  
 
 
Добавлено:
function uSiteGet($torrent) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $torrent);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5');
    curl_setopt($ch, CURLOPT_NOBODY, 0);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
header("Content-Disposition: attachment; filename=\"local_".$url."; charset=windows-1251\"");  
header ("Content-Type: application/x-bittorrent");
echo $result;
    curl_close($ch);
    }

Всего записей: 118 | Зарегистр. 12-09-2013 | Отправлено: 01:38 27-10-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
maxus5578
блин.. ну что же вы как попугай (без намерения обидеть) то копируете все, не думая.
хотя бы читайте описание функций, что ли..
 
вы же видите, что в данном случае ваша функция выводит полученные данные в браузер сама, не возвращает их из функции в другую переменную, не дает их изменять.
 

Код:
function uSiteGet($torrent) {  
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, $torrent);  
    curl_setopt($ch, CURLOPT_HEADER, 0);  
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5');  
    curl_setopt($ch, CURLOPT_NOBODY, 0);  
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 0);  
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    $result = curl_exec($ch);  
    curl_close($ch);  
    return $resut;
    }
 
$fn = uSiteGet($_GET['torrent']);  

тогда, в этом случае, вы получите в переменную $fn то, что скачали.
 
обрабатываете содержимое $fn как вам надо (не забыв проверить, что оно !== false, то есть не было ошибки) и только после этого сохраняете или выдаете в браузер.

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

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:43 27-10-2013 | Исправлено: Cheery, 01:48 27-10-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

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