Принудительная загрузка файлов с любой страницы!проверить файл is_readable? - PullRequest
1 голос
/ 03 сентября 2010

Я хочу скачать любой файл с любого веб-сайта с помощью скрипта принудительной загрузки. простой скрипт, который просто запрашивает окно загрузки, чтобы сохранить файл на рабочем столе. Я просто передаю? Path = http://www.google.com/images/whatever/file.jpg на URL, и скрипт запускает загрузку.

Однако этот скрипт, конечно, не работает для каждой страницы. В большинстве случаев у меня нет прав для этого!

HTTP-запрос не выполнен! HTTP / 1.0 403 Запрещено в ....

Есть ли способ, где я могу проверить, будет ли принудительная загрузка из какого-либо домена работать или нет. Например, is_readable () или что-то в этом роде.

С уважением, Мэтт

редактирование:

    <?php
    error_reporting(E_ALL);

    if(isset($_GET['p'])) $path = $_GET['p'];
    else header('Location:' . 'mypage');

    $file = $path;
    //header('Location:' . $file);
    //
    header("Cache-Control: no-cache");
    header("Expires: -1");
    header("Content-Type: application/octet-stream;");
    header("Content-Disposition: attachment; filename=\"" . basename($file) . "\";");
    header("Content-Transfer-Encoding: binary");
    //header("Content-Length: " . filesize($file));
    //echo file_get_contents($file);
    echo readfile($file);
    ?>

Ответы [ 2 ]

3 голосов
/ 03 сентября 2010

Если ваш скрипт использует curl для загрузки файла, вы можете использовать curl_getinfo и проверить CURLINFO_HTTP_CODE перед передачей файла пользователю.

1 голос
/ 03 сентября 2010

Я создал этот класс для своего проекта подсчета слов в MediaWiki.

// Copyright PHPExperts.pro
// License: Any user on Stackflow may use this code under the BSD License.

/**
* Web page datatype that holds all the various parts
* and info about a web page.
*/
class WebPage
{
    public $url;
    public $headers;
    public $body;
    public $text;


    public function __construct($url)
    {
        // 1. Bail out now if the CURL extension is not loaded.
        if (!in_array('curl', get_loaded_extensions()))
        {
            throw new Exception(WebPageException::MISSING_CURL);
        }

        // 2. Make sure the URL is valid.
        self::ensureValidURL($url);

        // 3. Store the URL.
        $this->url = $url;
    }

    /**
    * Determine if a URL is valid.
    *
    * @param string $url
    * @returns true if the URL is a string and is a valid URL. False, otherwise.
    */
    public static function isURLValid($url)
    {
        return (is_string($url) &&
                filter_var($url, FILTER_VALIDATE_URL) !== false);
    }

    public static function ensureValidURL($url)
    {
        if (!self::isURLValid($url))
        {
            throw new WebPageException(WebPageException::INVALID_URL, array($url));
        }
    }

    // captureHeader() donated by bendavis78@gmail.com,
    // via http://us.php.net/curl_setopt_array
    private function captureHeader($ch, $header)
    {
        $this->headers[] = $header;
        return strlen($header);
    }

    public function fetchURL()
    {
        $ch = curl_init();
        curl_setopt_array($ch, array(CURLOPT_URL => $this->url,
                                     CURLOPT_RETURNTRANSFER => 1,
                                     CURLOPT_HEADERFUNCTION => array($this, 'captureHeader'),
                                     CURLOPT_TIMEOUT => 5,
                                     )
                         );

        $data = curl_exec($ch);
        curl_close($ch);

        if ($data === false || is_null($data) || $data == '')
        {
            throw new WebPageException(WebPageException::BLANK_URL, array($this->url));

        }

        // TODO: Need to handle HTTP error messages, such as 404 and 502.
        $this->body = $data;
                // Uses code from php@wizap.dom
                $this->text = remove_HTML($data);
    }
}

После запуска WebPage::captureHeader() вы просто просматриваете $this->headers, и если вы не найдете HTTP / 1.0 403 Forbidden, все готово.

Это полностью отвечает на ваш вопрос, поэтому я ожидаю кредита.

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