JFIF x x C C " } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w !1AQ aq"2B #3Rbr{
File "FileController.php"
Full Path: /home2/yvrgircc/public_html/ariseskilltech.com/app/Http/Controllers/FileController.php
File size: 7.51 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Lesson;
use Illuminate\Support\Facades\File;
class FileController extends Controller
{
public function get_file(Request $request)
{
// check this request from iframe, canvas, api or direct from browser url
if (isset($_SERVER['HTTP_REFERER']) && isset($_SERVER['HTTP_SEC_FETCH_MODE'])) {
} else {
return false;
}
$user_id = auth()->user()->id;
if (isset($request->course_id) && isset($request->lesson_id) && $user_id > 0) {
$course_id = $request->course_id;
$lesson_id = $request->lesson_id;
$lesson = Lesson::find($lesson_id);
$get_lesson_type = $lesson->lesson_type;
if(enroll_status($course_id, $user_id) || auth()->user->role == 'admin' || is_course_instructor($course_id, $user_id)){
if ($get_lesson_type == 'image' || $get_lesson_type == 'document_type') {
$fileUrl = 'uploads/lesson_file/attachment/' . $lesson->attachment;
}
if ($get_lesson_type == 'system-video') {
$fileUrl = $lesson->lesson_src;
}
if (str_contains('https:', url('')) !== false && str_contains('http:', $fileUrl) !== false) {
$fileUrl = str_replace('http:', 'https:', $fileUrl);
}elseif(str_contains('http:', url('')) !== false && str_contains('https:', $fileUrl) !== false){
$fileUrl = str_replace('https:', 'http:', $fileUrl);
}
$fileUrl = str_replace(url(''), '', $fileUrl);
$basename = basename($fileUrl);
if (str_contains('http', $fileUrl) !== false) {
$header_data = get_headers($fileUrl, 1);
if (array_key_exists('Content-Type', $header_data)) {
$content_type = $header_data['Content-Type'];
}
if (array_key_exists('Content-type', $header_data)) {
$content_type = $header_data['Content-type'];
}
if (array_key_exists('content-type', $header_data)) {
$content_type = $header_data['content-type'];
}
//$this->get_remote_file_size($fileUrl);
if (array_key_exists('Content-Length', $header_data)) {
$file_size = $header_data['Content-Length'];
}
if (array_key_exists('Content-length', $header_data)) {
$file_size = $header_data['Content-length'];
}
if (array_key_exists('content-length', $header_data)) {
$file_size = $header_data['content-length'];
}
} else {
$content_type = mime_content_type(public_path($fileUrl));
$file_size = filesize(public_path($fileUrl));
}
if ($get_lesson_type == 'image' || $get_lesson_type == 'document_type') {
//for not streaming file as like: img, pdf, txt and more.
header('Content-Type: ' . $content_type);
header('Content-Length: ' . $file_size);
// header('Content-Disposition: inline; filename=' . basename($fileUrl));
readfile(public_path($fileUrl));
exit;
} elseif($get_lesson_type == 'system-video') {
if($file_size < 3000000){
$chunkSize = $file_size;
}else{
$chunkSize = 3000000;
}
$start = 0;
$end = $file_size - 1;
$range = isset($_SERVER['HTTP_RANGE']) ? $_SERVER['HTTP_RANGE'] : 'bytes=0-' . $chunkSize;
header('Accept-Ranges: bytes');
header('Content-Type: ' . $content_type);
header('Content-Disposition: inline; filename="' . $basename . '"');
if ($range) {
header('HTTP/1.1 206 Partial Content');
$range = explode('=', $range);
$start = intval($range[1]);
$end = min($start + $chunkSize - 1, $file_size - 1);
header('Content-Range: bytes ' . $start . '-' . $end . '/' . $file_size);
} else {
header('Content-Length: ' . $file_size);
}
// Set cache-control headers
header('Cache-Control: public, max-age=0');
header('Pragma: public');
// Remove unnecessary headers
header_remove('Expires');
$handle = fopen(public_path($fileUrl), 'rb');
fseek($handle, $start);
while (!feof($handle) && ($pos = ftell($handle)) <= $end) {
if ($pos + $chunkSize > $end) {
$chunkSize = $end - $pos + 1;
}
echo fread($handle, $chunkSize);
ob_flush();
flush();
}
fclose($handle);
exit;
}
}
}
}
public function get_video_file(Request $request)
{
$user_id = auth()->user()->id;
if (isset($request->course_id) && isset($request->lesson_id) && $user_id > 0) {
$course_id = $request->course_id;
$lesson_id = $request->lesson_id;
$lesson = Lesson::find($lesson_id);
$get_lesson_type = $lesson->lesson_type;
if(enroll_status($course_id, $user_id) || auth()->user->role == 'admin' || is_course_instructor($course_id, $user_id)){
if ($get_lesson_type == 'system-video') {
$fileUrl = $lesson->lesson_src;
$filePath = public_path($fileUrl);
}
if (File::exists($filePath)) {
// Open the file as a stream and set headers
$stream = fopen($filePath, 'rb');
$mimeType = mime_content_type($filePath);
// Return the file as a stream (no direct download, just playback)
return response()->stream(function () use ($stream) {
fpassthru($stream);
}, 200, [
'Content-Type' => $mimeType,
'Content-Length' => filesize($filePath),
'Cache-Control' => 'no-cache',
'Content-Disposition' => 'inline; filename="' . basename($filePath) . '"',
]);
} else {
abort(404, 'Video not found');
}
}
}
}
public function pdf_canvas($course_id = "", $lesson_id = "")
{
$user_id = auth()->user()->id;
if(enroll_status($course_id, $user_id) || auth()->user->role == 'admin' || is_course_instructor($course_id, $user_id)){
$page_data['course_id'] = $course_id;
$page_data['lesson_id'] = $lesson_id;
return view('course_player.pdf_canvas', $page_data);
} else {
echo get_phrase('Access denied');
}
}
}