サーバーのルートディレクトリ外のファイルにアクセスするにはどうすればよいですか?
例:/home/username/FILE.mp3
私が現在ファイルを開くために使用しているコードは次のとおりです。
<?php
$location = "ABSOLUTE-PATH/FILE.mp3";
$ch = curl_init($location);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FILETIME, true);
$data = curl_exec($ch);
$timestamp = curl_getinfo($ch, CURLINFO_FILETIME);
curl_close($ch);
if ($data === false) {
echo 'CURL Failed';
exit;
}
//Get file size
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
$contentLength = (int)$matches[1];
}
$begin = 0;
$end = $contentLength - 1;
if (preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
{
$begin = intval($matches[1]);
if (!empty($matches[2]))
{
$end = intval($matches[2]);
}
}
if (isset($_SERVER['HTTP_RANGE']))
{ header('HTTP/1.1 206 Partial Content'); }
else
{ header('HTTP/1.1 200 OK'); }
header('Accept-Ranges: bytes');
header('Content-Length: ' . $contentLength);
header("Content-Range: bytes $begin-$end/$contentLength");
header('Content-Type: audio/mpeg');
header('Cache-Control: public, must-revalidate, max-age=0');
if ($timestamp != -1) { //otherwise unknown
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $timestamp) . " GMT");
}
ob_clean();
flush();
echo ($data);
exit;
?>
私はcURLが相対パスで機能しないことを知っており、ルートディレクトリ外のファイルは相対リンクとして扱われると思います。