Ben kullanıcı doğrulama amaçlı PHP ile herhangi bir web kaynak için tüm istekleri göndermek için, ve Apache doğrudan herhangi bir dosya değil hizmet için bir ihtiyaç var. . İşte benim htaccess bulunuyor:
# All requests are routed to PHP (images, css, js, everything)
RewriteRule ^(.*)$ index.php?query=$1&%{QUERY_STRING} [L]
Daha sonra aşağıdaki PHP okuma işlevini kullanarak işlem gerektirmez herhangi bir dosyayı kullanıcı kaynağa erişimi vardır doğrulamak, ve sonra çıktı, isteği işlemek. Bu sadece Apache onun bir şey yapmasına izin kıyasla inanılmaz derecede yavaş olduğunu çıkıyor.
Herkes bana performansı artırmak için bir yol tavsiye edebilir misiniz?
static function read($path) {
if(!File::exists($path)) {
//echo 'File does not exist.';
header("HTTP/1.0 404 Not Found");
return;
}
$fileName = String::explode('/', $path);
if(Arr::size($fileName) > 0) {
$fileName = $fileName[Arr::size($fileName) - 1];
}
$size = File::size($path);
$time = date('r', filemtime($path));
$fm = @fopen($path, 'rb');
if(!$fm) {
header("HTTP/1.0 505 Internal server error");
return;
}
$begin = 0;
$end = $size;
if(isset($_SERVER['HTTP_RANGE'])) {
if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches)) {
$begin = intval($matches[0]);
if(!empty($matches[1]))
$end = intval($matches[1]);
}
}
if ($begin > 0 || $end < $size)
header('HTTP/1.0 206 Partial Content');
else
header('HTTP/1.0 200 OK');
// Find the mime type of the file
$mimeType = 'application/octet-stream';
//$finfo = @new finfo(FILEINFO_MIME);
//print_r($finfo);
//$fres = @$finfo->file($path);
//if(is_string($fres) && !empty($fres)) {
//$mimeType = $fres;
//}
// Handle CSS files
if(String::endsWith('.css', $path)) {
$mimeType = 'text/css';
}
header('Content-Type: '.$mimeType);
//header('Cache-Control: public, must-revalidate, max-age=0');
//header('Pragma: no-cache');
header('Accept-Ranges: bytes');
header('Content-Length:' . ($end - $begin));
header("Content-Range: bytes $begin-$end/$size");
header("Content-Disposition: inline; filename=$fileName");
header("Content-Transfer-Encoding: binary\n");
header("Last-Modified: $time");
header('Connection: close');
$cur = $begin;
fseek($fm, $begin, 0);
while(!feof($fm) && $cur < $end && (connection_status() == 0)) {
print fread($fm, min(1024 * 16, $end - $cur));
$cur += 1024 * 16;
}
}