【问题标题】:How can I use Basic HTTP Authentication in PHP to access a text file by username and password?如何在 PHP 中使用基本 HTTP 身份验证通过用户名和密码访问文本文件?
【发布时间】:2014-09-12 18:52:19
【问题描述】:

我是 php 编程新手。我需要创建一个网页,该网页从用户那里获取用户名和密码,并在验证后可以访问特定的文本文件。我已经在文档页面上看到了基本内容,运行后对我来说效果很好(但是我需要定义用户名和密码):

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
} else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>

我的问题是,我需要一个 bash/shell 脚本,它将用户名和密码信息发送到此页面,然后它可以下载 texfile。该文本文件位于 htdocs 目录中,名为“welcome.txt”。用于下载文件的 bash 脚本命令可以是这样的:

#!/bin/bash
clear
wget --user=admin --password=admin http://behzadgarekani.net16.net/connect.php -O -q my-old-bookmarks.txt

使用curl

如果您能帮助我,我将不胜感激。没有力量我必须这样做。如果您有任何其他建议分享此文本文件,我们将不胜感激。

编辑:

<?php

    destroy_foo();
    function destroy_foo()
    {
        unset($GLOBALS[_SERVER]);

        if (isset($_SERVER['PHP_AUTH_USER'])) {

            unset($_SERVER['PHP_AUTH_USER']);

        }
        if (isset($_SERVER['PHP_AUTH_PW'])) {

            unset($_SERVER['PHP_AUTH_PW']);

        }
    }

    //unset ($_SERVER['PHP_AUTH_USER'] );
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
        header('WWW-Authenticate: Basic realm="My Realm"');
        header('HTTP/1.0 401 Unauthorized');
        echo 'Text to send if user hits Cancel button';
        exit;
    } else {
        echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
        echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
        //header('Location: welcome.txt');

        $file = 'welcome.txt';

        if($_SERVER['PHP_AUTH_PW'] == "admin" && $_SERVER['PHP_AUTH_USER'] =="admin"){

            if (file_exists($file)) {
                header('Content-Description: File Transfer');
                header('Content-Type: application/octet-stream');
                header('Content-Disposition: attachment; filename='.basename($file));
                header('Expires: 0');
                header('Cache-Control: must-revalidate');
                header('Pragma: public');
                header('Content-Length: ' . filesize($file));
                readfile($file);
                destroy_foo();

                exit;
            }
        }
    }
    ?>

【问题讨论】:

标签: php bash file shell authentication


【解决方案1】:

根据您的 cmets,我认为登录后您想强制下载文件

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}
?>

对于文本文件

header('Content-type: text/plain');

http://php.net/manual/en/function.readfile.php

http://webdesign.about.com/od/php/ht/force_download.htm

【讨论】:

  • 感谢您的回复。下载有问题。我的 bash 脚本正在下载 html 文件格式的文本文件。
  • 我是否需要删除以前的标题,因为它甚至无法使用。文件为html格式
  • 下载后请看图
猜你喜欢
  • 2011-01-24
  • 2016-09-14
  • 2015-01-17
  • 2014-05-10
  • 1970-01-01
  • 2018-04-14
  • 2011-05-08
  • 2023-03-08
  • 2017-10-03
相关资源
最近更新 更多