你可以这样:
用一个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文件,而看不到他的真实路径。

解决方案 »

  1.   

    那个访问的人怎么能找到音乐的源文件了,PHP作了中间操作,它是直接输出音乐文件的二进制代码,而不是直接跳转,这样是找不到源文件的。
      

  2.   

    写一个php把文件读出来再送出去。
    这样他就不能得到绝对路径了。还可以设置读取权限
      

  3.   


    确实获取到二进制代码, 拿迅雷新建下载 把http://www.example.com/music.php?id=1234567, 另存为MP3的格式,是不是就可以下载了呢???
      

  4.   

    <?php
    /**
     * @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]';
    }?>
      

  5.   

    原来你想别人不能下载那个歌曲文件,那么始终都是可以下载到的,只要你的客户端能够听到歌曲,你可以做一些简单的防护,就是用$_SERVER['HTTP_REFERER']这个进行判断,但是可以作假,起码一大部分的用户是不会那么无聊去弄大劲去下载的。<?php
    //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 "禁止访问本音乐";
    }
    ?>
      

  6.   

    如果mp3放在自己的服务器上,那么可以设置一下服务器目录的一些权限,如果是linux主机就好办,具体可以去网上搜搜:  .htaccess
      

  7.   

    应该是做在线试听吧?想得到终归是可以得到的,就算你用流媒体,也会被下载。不过可以做一些"防君子不防小人的办法"你去查看一些在线音乐试听站,他们都会在客户端用js做一些简单的加密。比如你写一个js函数,代码写的乱点,比如有个函数a是获取某个链接id的,函数b调用函数a来组合1.mp3的绝对路径。函数里面写的"飘"一些,尽量带有迷惑性。然后用js来调用控件播放音乐,浏览器地址栏是看不到的。服务器端也可以再增加下referer的判断。
    这样的话,对于普通用户或是水平一般的人,就拿你没办法了。不过真正了解这一套的人,还是可以一步步把你的js给调试明白的。
      

  8.   

    根据http协议,隐藏url是不可能做到的,隐藏了地址浏览器都不知道往那下载了如果是为了防盗链,我倒是可以帮助,不过是要收一定费用的