你可以这样:
用一个Php代替,如:
那个Php有一个参数,用GET的参数,在HTML的object对象,的地址用带参数的Php表示:
例如:http://www.example.com/music.php?id=1234567,音乐文件路径在数据库的music库、music表里面,则music.php的内容为:
<?php
//这里根据自己的情况,在数据库里面查询,把音乐的本地文件路径查询出来
//这里设$result是根据$_GET['id']变量查询出来的路径
echo file_get_contents($result);
?>
这样别人只能看到PHP文件,而看不到他的真实路径。
用一个Php代替,如:
那个Php有一个参数,用GET的参数,在HTML的object对象,的地址用带参数的Php表示:
例如:http://www.example.com/music.php?id=1234567,音乐文件路径在数据库的music库、music表里面,则music.php的内容为:
<?php
//这里根据自己的情况,在数据库里面查询,把音乐的本地文件路径查询出来
//这里设$result是根据$_GET['id']变量查询出来的路径
echo file_get_contents($result);
?>
这样别人只能看到PHP文件,而看不到他的真实路径。
这样他就不能得到绝对路径了。还可以设置读取权限
确实获取到二进制代码, 拿迅雷新建下载 把http://www.example.com/music.php?id=1234567, 另存为MP3的格式,是不是就可以下载了呢???
/**
* @copyright MoXie([email protected]) 2009-01-11 21:09
*/
class Signner{
/**
* music id
* @var String
*/
private $musicId; /**
* random sn for signner
* @var String
*/
private static $safeKey = '123321abcdefg';
/**
*
* @param Mixed $musicId
*/
public function __construct($musicId) {
$this->musicId = $musicId ;
}
/**
*
* @param Mixed $ip
* @return String
*/
public function sign($ip){
return md5($ip.self::$safeKey.$this->musicId);
}
/**
*
* @param Mixed $sign
* @param Mixed $ip
* @return Boolean
*/
public function vali($sign,$ip){
return ($sign == $this->sign($ip));
}
}
/**
* page A for build the urls;
*/
$aIp = '127.0.0.1'; // A client's ip.
$musicId = 321;
$signner = new Signner($musicId);
$sign = $signner->sign($aIp);
echo $sign; // 565ed246f1180dab3ba935017b98d97d
/**
* url= http://yourdomain.com/getMusic.php?musicId=321&sign=565ed246f1180dab3ba935017b98d97d
*/
/**
* correct url
* page B for read music files.
* $sign = $_GET['sign'];
*/
$aIp = '127.0.0.1'; // A client's ip.
$signner = new Signner($musicId);
if ($signner->vali($sign, $aIp)){
echo '<br />file_get_content here![a]';
}else{
echo '<br />Show error message here![a]';
}
/**
* error ip
*/
$bIp = '127.0.0.2'; // B client's ip.
$signner = new Signner($musicId);
if ($signner->vali($sign, $bIp)){
echo '<br />file_get_content here![b]';
}else{
echo '<br />Show error message here![b]';
}
/**
* error music
*/
$musicId = 123;
$signner = new Signner($musicId);
if ($signner->vali($sign, $aIp)){
echo '<br />file_get_content here![c]';
}else{
echo '<br />Show error message here![c]';
}?>
//if($_SERVER['HTTP_REFERER'] == "你的条件,这个是你的上一页URL,也就是你要从哪个地方的网页点击才能通过此判断")
//举个例子,要从http://example.com/music.php点击过来才可以下载:
if($_SERVER['HTTP_REFERER'] == "http://example.com/music.php")
{
//这里根据自己的情况,在数据库里面查询,把音乐的本地文件路径查询出来
//这里设$result是根据$_GET['id']变量查询出来的路径
echo file_get_contents($result);
}
else
{
echo "禁止访问本音乐";
}
?>
这样的话,对于普通用户或是水平一般的人,就拿你没办法了。不过真正了解这一套的人,还是可以一步步把你的js给调试明白的。