PHP目录镜像

时间:2011-09-11 07:13:00

标签: php

我想通过php镜像一个目录,所以我可以在不必直接修改它们的情况下使用这些文件。

我找到了这个脚本(here),但是当我尝试设置它时,我一直收到500内部服务器错误。

可能是因为它来自2004年吗?

有没有其他方法来设置它或另一种方法来做同样的事情?

这是我在共享主机方案中使用的一些代码

代理文件

<?php

error_reporting(0);

set_time_limit(0);

function recur_dir($dir)
{
    $dirlist = opendir($dir);
    while ($file = readdir ($dirlist))
    {
        if ($file != '.' && $file != '..' && $file != '.DS_Store' && $file != 'mirror_agent.php')
        {
            $newpath = $dir.'/'.$file;
            $permissions = substr(decoct(fileperms($newpath)),-4);
            if (is_dir($newpath))
            {
                echo '
dir|'.$newpath.'|'.$permissions;
                recur_dir($newpath);
            }else{
                echo '
file|'.$newpath.'|'.$permissions.'
'.bin2hex(file_get_contents($newpath));
           }
        }
    }
    closedir($dirlist); 
    return $mod_array;
}

header('Content-type text/plain');
echo 'mirror_agent here';
recur_dir('.');

unlink(__file__);

?>

客户端文件

<?php

$mirror_agent = 'http://moddline.com/safe/mirror_agent.php';

function hex2asc($temp)
{
    for ($i = 0; $i < strlen($temp); $i += 2) $data .= chr(hexdec(substr($temp,$i,2)));
    return $data;
}

function file_write($filename, $filecontent, $mode='wb')
{
    if($fp = fopen($filename,$mode))
    {
        fwrite($fp, $filecontent);
        fclose($fp);
        return true;
    }else{
        return false;
    }
}

error_reporting(0);

set_time_limit(0);

$cont = file_get_contents($mirror_agent);
$files = explode("\n",$cont);

if(trim($files[0]) == 'mirror_agent here' && is_writeable(dirname(__file__)))
{

    for($i = 1; $i < count($files); $i++)
    {
        if(trim($files[$i]) != '')
        {
            $parts = explode('|',trim($files[$i]));
            $permissions = intval($parts[2], 8);
            if($parts[0] == 'dir')
            {

                mkdir($parts[1],$permissions);
                $done[] = $permissions.'|'.$parts[1];
            }elseif($parts[0] == 'file')
            {
                file_write($parts[1], hex2asc($files[$i+1]));
                chmod($parts[1],$permissions);
                $done[] = $permissions.'|'.$parts[1];
                $i++;
            }
        }
    }
    // output status
    echo '
<pre>
following files were copied:';

    for($i = 0; $i < count($done); $i++)
    {
        echo '
'.$done[$i];
    }

    echo '
</pre>';

    unlink(__file__);
}else{
    echo '
<pre>
ERROR:
'.$mirror_agent.'
does not respond like a mirror_agent should or
the directory '.dirname(__file__).' is not writeable.
</pre>';
}

?>

0 个答案:

没有答案