Back to Question Center
0

Semalt нь PHP-р дамжуулагдсан бол хүсэлтийг хүчингүй болгохгүй

1 answers:

Би PHP дээр скриптээр дамжуулан тухайн сан доторх файлуудын бүх хүсэлтийг Semalt руу чиглүүлэх боломж бүхий сайттай.htaccess Дээрх функцийг идэвхгүй болгосон бөгөөд Semalt нь видеог шууд дамжуулж байгаа бол видеог татан авахад дараагийн товчлуурыг дарж дараагийн хуудас ачаалах болно.Уг боломжыг идэвхжүүлснээр, дараа нь дарж товчлуурыг дарж татаж дуусахаас өмнө вэб хөтөч нь татаж дуусах хүртэл үндсэндээ зогсоно, дараа нь дараагийн хуудас ачаалах болно - adaptive analytics.Энэ яагаад ийм байдгийг олж мэдэхэд хэцүү байна. PHP-г ажиллуулахын тулд браузерыг бүхэлд нь дуусгахыг хүлээж байгаа юм болов уу?

Семаль нь шууд хүсэлтэд хариу өгөх удирдамж юм:

     HTTP / 1. 1 206 хэсэгчилсэн агуулга
Огноо: 2014 оны 10-р сарын 31, Даваа гариг, 21:28:10 GMT
Сервер: Apache
Хамгийн сүүлд засварласан: 2014 оны 10-р сарын 20, Лхагва гариг, 15:45:20 GMT
Etag: "1601ee2-c4fcc5-505dc9a1e4fe5"
Зөвшөөрөгдөх хүрээ: байт
Агуулга-урт: 12909765
Өөрчлөлт: Хэрэглэгч-Agent
Агуулга Range: 0 байт 012909764/12909765
Keep-Alive: timeout = 15, max = 142
Холболт: Байнга амьдар
Агуулга-төрөл: видео / mp4   

PHP-р дамждаг хүсэлтийн хувьд:

     HTTP / 1. д. Chrome нь ялангуяа муу, бүхэл бүтэн таб хариулахгүй. Хэрэв би өөр таб руу шилжиж, буцаад дахин цагаан өнгөтэй болно. Библийн хувьд үйл ажиллагааг таслан зогсоохын тулд Semalt ажлын менежер ашиглахгүй бол бибит эсвэл хөтөчийг хааж чадахгүй  . WHM-д би PHP 5 handler-г "dso" гэж сонгосон ба suEXEC-г идэвхжүүлсэн байна.  

Засварлах:

Би нэг уншсан мэдэгдлийг нэг давталтаар сольсон. Үйлчлүүлэгчийг цуцалсан эсвэл урсгал дууссан эсэхийг шалгаж, энэ асуудлыг зассангүй. Би файлын кодыг илгээж байгаа файлын PHP-ийн доорх хэсгийг доороос нь бөглөж байна (304, 403, 404, гэх мэт хариултуудын эсрэг):

(форматын талаар уучлаарай, яагаад нэмэлт мөрүүдийг нэмсэн, онцлон тэмдэглэсэн) гэдэгт би итгэлгүй байна

     // файлыг кэш хийгээгүй эсвэл хуучирсан кэш хийлгүй бид 200 OK (эсвэл 206) болон
// файлыг гаргана уу. if (isset ($ headers ['Range'])) {$ response_code = 200;
}
өөр {$ response_code = 206;
}// Өгөгдсөн сүүлчийн өөрчлөгдсөн толгойг илгээх ба хариултын кодыг тавь
толгой ('Хамгийн сүүлд өөрчлөгдсөн:'. gmdate ('D, d M Y H: i: s', $ mtime). 'GMT',үнэн, $ response_code);
толгой ('Агуулга-төрөл:'. get_mime_type ($ файл));
if ($ method == 'GET' || $ method == 'HEAD') {толгой ('Хүлээн зөвшөөрөх-Богино: байт');
}$ filesize = filesize ($ файл);
$ start_read_pos = 0;
$ max_read_chunk = 65536;
$ total_read_size = $ файлын хэмжээ;
$ content_length = $ filesize;// тохируулгын уртыг тохируулах, муж дээр суурилсан байрлалыг тохируулна
if (isset ($ headers ['Range'])) {// Range: bytes = 1000-1999// Range: bytes = 2000-$ range_chunks = explode ('=', $ headers ['Range']);// эхний элемент нь "байт"$ range = $ range_chunks [1]; // д. g. 1024-2048, эсвэл 1024-$ range_chunks = explode ('-', $ range);$ start_read_pos = intval ($ range_chunks [0]);$ end_read_pos = isset ($ range_chunks [1])? intval ($ range_chunks [1]): 0;if ($ end_read_pos == 0) {$ end_read_pos = $ filesize - 1;}$ total_read_size = $ end_read_pos - $ start_read_pos + 1;$ content_length = $ total_read_size;
}толгой ('Агуулга-урт:'. $ content_length);
if (isset ($ headers ['Range'])) {толгой ('Агуулгын хүрээ: байт'. $ start_read_pos. '-' . сүүлчийн) уншиж шаарддаг// max уншсан хэсгээс илүүif ($ total_sent + $ max_read_chunk> $ total_read_size) {$ read_chunk = $ total_read_size - $ total_sent;}echo fread ($ fh, $ read_chunk);$ total_sent + = $ read_chunk;$ stream_info = stream_get_meta_data ($ fh);if ($ stream_info ['timed_out']) {$ timeout = үнэн;}}fclose ($ fh);}}өөр {// PHP кодыг харуулахгүйагуулгын урттай тааруулахын тулд // дэвсгэрecho str_pad ('PHP код', $ content_length); толгой}гарах 
; }
February 5, 2018
. PHP-тэй видеогоор үйлчилдэг нь ихэвчлэн том санах ойд үр дүнгүй байх хандлагатай байдаг. Би та X-Sendfile шиг ашиглахыг санал болгож байна. Ингэснээр та PHP-д нэвтрэлт танилтын шалгалтаа хийдэг боловч вэб серверийг жинхэнэ өргөх үйлдлийг хийдэг.

Энд байгаа асуудал нь таны Apache тохиргоотой холбоотой байх магадлалтай боловч таны PHP скрипт дээр байна гэж би бодож байна. Жишээлбэл, хэрэв таны скрипт видеоны бүхэл бүтэн файлыг нэгээр нь ачаалж, дараа нь бүгдийг нь хөтөч уруу илгээж байвал энэ асуудлыг үүсгэж болно:

   

Гэсэн хэдий ч, хэрэв та видео файлыг ачаалж, өгөгдлийг маш бага тооны хэсгүүдээр хөтлөн явуулсан бол энэ нь таны асуудлыг шийдэж болох юм: