2016-02-19 3 views
1

Я пытаюсь узнать о создании веб-ботов, и я прокладываю себе путь через книгу под названием Webbots, Spiders и Screen Scrapers от Michael Schrenk. В книге он приводит пример кода для базового бота, который загружает веб-страницу. Я скопировал код в точности так, как оно есть в книге (Sans комментарии):php file и функции fopen не работают

<? 
$target = "http://www.schrenk.com/nostarch/webbots/hello_world.html"; 
$downloaded_page_array = file($target); 
for($xx=0; $xx<count($downloaded_page_array); $xx++) 
echo $downloaded_page_array[$xx]; 
?> 

я ставлю этот код в файл PHP и загрузил на мой сайт. Однако, когда я перехожу к нему в браузере, ничего не происходит. Он просто загружает пустую страницу. Без содержания.

Раньше я пробовал другой фрагмент, предоставленный автором, опять же, этот был скопирован ТОЧНО из книги, только с этим я действительно не получал пустую страницу, страница просто пыталась загрузить, пока она не была в конечном итоге отключена , Никогда не получал правильное содержание назад:

$target = "http://www.schrenk.com/nostarch/webbots/hello_world.html"; 
$file_handle = fopen($target, "r"); 
while (!feof($file_handle)) 
echo fgets($file_handle, 4096); 
fclose($file_handle); 

Я проверил URL-адрес, чтобы убедиться, что файл существует и он работает. Я понятия не имею, почему это не сработает. Я прочитал, как использовать файл(); и fopen(); функции в PHP, но из того, что я могу сказать, они оба используются правильно. Что я здесь делаю неправильно?

+1

'error_reporting (E_ALL); ini_set ('display_errors', '1'); ' – AbraCadaver

+0

Кроме того, использование' Kenney

+0

См. Совет AbraCadaver. Попробуйте заменить ' fusion3k

ответ

0

Сначала вы должны положить error_reporting(E_ALL); ini_set('display_errors', '1'); в свой скрипт, чтобы отображать ошибки в вашем скрипте, как указано в его комментарии AbraCadaver.

Причиной может быть то, что allow_url_fopen отключен на вашем хостинге.

This option enables the URL-aware fopen wrappers that enable accessing URL object like files. Default wrappers are provided for the access of remote files using the ftp or http protocol, some extensions like zlib may register additional wrappers.

См: http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

Вы можете проверить, что с помощью:

var_dump(ini_get('allow_url_fopen')); 

Ваш сценарий требует true для запуска правильно.

Если allow_url_fopen не true или 1 вы можете попробовать использовать file_get_contents() для загрузки URL.

<?php 
$homepage = file_get_contents('http://www.example.com/'); 
echo $homepage; 
?> 

См: http://php.net/manual/en/function.file-get-contents.php

+0

Спасибо, что нашли время ответить. Я принял ваши предложения и добавил строки кода, чтобы сообщить об ошибках. Это то, что было возвращено: string '' (length = 0) –

+0

поэтому кажется, что 'allow_url_fopen' не активирован/не разрешен для обеспечения безопасности. Кажется, вы не можете использовать' fopen() 'для загрузки URL-адреса. Пожалуйста, прочтите мой обновленный ответ. – Roman

0

Не fgets($file_handle, 4096) но fread($file_handle, 4096);

$target = "http://www.schrenk.com/nostarch/webbots/hello_world.html"; 
$file_handle = fopen($target, "r"); 
while (!feof($file_handle)) 
echo fread($file_handle, 4096); 
fclose($file_handle); 

Тогда позже, если вы хотите создать новый файл из извлеченного текста:

// extracting text operation 
$target = "http://www.schrenk.com/nostarch/webbots/hello_world.html"; 
$file_handle = fopen($target, "r"); 
$getText = fread($file_handle, 4096); 
fclose($file_handle); 

// writing file operation 
$writeHandle = fopen ("folder/text.txt","w"); // file will be created if not existed 
$writeFile = fwrite($writeHandle,$getText); 
fclose($writeHandle); 
0

Доступа к URL-адреса с помощью fopen() является плохой идеей. Он требует, чтобы в вашей конфигурации PHP было включено allow_url_fopen, что открывает дверь для огромного количества эксплойтов (хостеры отключили его по какой-то причине).

Вместо этого попробуйте использовать cURL functions: они придадут вам большую гибкость и контроль. Документация PHP дает вам примерно great examples.