Alternativa la file_get_contents or readfile PHP

Salut,as vrea sa citesc un fisier video la distanta (pe un alt server) utilizand php. Fisierul are o dimensiune mare, undeva la 7-800 mb. Ideea este ca eu pot limita din php traficul, cu ajutorul CURL, insa ce metoda as putea folosi ca traficul sa fie structurat astfel:

user->videofile in loc de user->readfile.php - videofile, deoarece daca eu am la server o limita de banda,si am in acelasi timp 100 de utilizatori care vad clipul, acestia nu vor trage din viteza server-ului meu?

Care ar fi ideea,sa treaca prin fisierul meu PHP cu un fel de redirect catre acel video?insa sa nu fie afisata locatia reala a fisierului,in inspectarea traficului din browser,sau orice alte tool-uri.

nu am inteles nimic.
nu vad ce treaba are php cu ce vrei tu sa faci.

1 Like

Probabil n-ai citit cu atentie. In consecinta sa fac un “mirror” fara a se vedea locatia reala a clipului,adica sa nu apara ca este pe server-ul,unde defapt el este.

Am incercat si eu odata sa fac treaba asta. Cu php e cam greu (adica nasol ca performanta).
file_get_contents din cate stiu incearca sa descarce tot fisierul, abea dupa ce l-a descarcat il trimite la vizitator (in timp ce readfile trimite la vizitator video in timp ce il descarca).
Eu reusisem sa fac sa mearga cu readfile, dar se oprea dupa 15 minute.

Ai putea incerca sa faci proxy prin nginx. Am gasit ceva aici (mai multe informatii aici si aici), dar problema este ca nu poti face proxy pentru niste linkuri care le ai in baza de date sa zicem.
Ai putea face un script php care sa genereze configuratie nginx pentru fiecare fisier video pentru care vrei sa faci proxy.

1 Like

Multumesc, incercasem intr-un timp cu nginx insa ma depaseste,iar din cate-am citit, am inteles ca fisierul trebuie stocat in server-ul unde ruleaza nginx.

Dacă fișierele sunt pe un server propriu (e.g. cdn), poți folosi o autentificare pe bază de token (un exemplu ai aici).

Dacă nu sunt pe un server propriu… Ei bine, ori le pui pe serverul tău pe cele mai accesate (de ex. ai putea stoca pe un cdn fișierele timp de X ore/zile; dacă mai e accesat în acest interval, îl servești de la tine și îl mai prelungești X ore/zile).

Oricum ai face, bada serverului tău va fi păpată, pentru că va acționa ca un proxy.

1 Like

Pai ar fi bine, insa eu ma gandeam ca daca un utilizator are viteza la net de 200kb/s, iar eu am 100mb/s , la 500 simultan n-as atinge eu limita mea,sau cum se procedeaza?

Nu sunt expert la servere, dar cred că dacă vei avea 501 simultani le va scădea viteza tuturor la 199kb/s :slight_smile:

Limita la hosting nu se aplică în baza conexiunilor simultane ci a traficului total. Adică ai 100gb trafic lunar, dacă îl depășești, ai probleme. E treaba ta dacă ajungi la 100gb într-o lună sau într-o zi :slight_smile:

Nu se foloseste PHP/cURL pentru asa ceva, iti trebuie un server de load balancing gen HAProxy/nginx si setezi rate limiting. Oricum iti trebuie un buffer pentru fiecare client ca sa limitezi viteza (aka descarci pe server), folosesti banda deodata pe 2 servere deci e IMPOSIBIL ce vrei din backend. Nu exista redirect la o resursa, exista un buffer care trimite spre un port pachete cu o anumita viteza si cam atat, altfel practic nu faci nimic, informatica nu e magie, nu iti apar 1 si 0 ca prin magie.

E extrem de simplu sa faci rate limit la nginx, pur si simplu faci un proxy de pe un site pe altul si limitezi dar nu e magie, iti trebuie cate un server si banda calculata. Tu tot salvezi fisierul pe server altfel nu ai cum sa il redirectionezi si sa schimbi ip-ul. (nginx isi face un buffer din resursa ceruta in limitele setate de tine)

Problema e iarasi complicata din cauza faptului ca pentru tine 800 mb e mare, 800 mb se descarca intr-o secunda si ceva pe un server gazduit intr-un loc decent. Eu n-am avut probleme cu 30 Tb cu nginx impartit pe mai multe vps-uri si tu ai probleme cu 800 mb.

Totusi, din cate am inteles singura ta solutie e sa rescrii playerul incat sa nu descarce cu mai mult de o anumita viteza/client si sa speri ca nimeni nu iti modifica playerul JS. (daca esti destept adaugi un sistem de logging de la fiecare user sa stii cu cat descarca fiecare si daca cumva descarca cu prea mult il banezi, in toate sistemele gen youtube, vimeo, hbo go ai loguri in cloud de big data cu tot ce iti poti imagina, acum nu zic ca pentru un site mic iti trebuie dar e o idee buna sa salvezi inapoi viteza de descarcare a fiecarui client)

Cea mai simpla recomandare a mea e sa folosesti CloudFlare sau un CDN, nu te complica cu prostii daca ai nevoie de ceva simplu.

Ms mult,am inteles acum cum sta treaba. O sa vad ce pot face.

Un simplu proxy nu ar fi destul, dacă doar vrei să ascunzi sursa originală a video-ului?

da,doar atat.

Proxy, tunnel, vpn orice altceva necesita inca un server si foloseste banda. Ma rog, normal ca poate ascunde ip-ul printr-un proxy platit si e o solutie ok dar nu sunt prosti nici cei care ofera proxy-ul/vpn-ul platit.

Dar dacă foloseşti file_get_contents şi-l treci prin serverul tău, oricum consumi bandă.

Eu mă refeream un proxy instalat pe serverul actual, ca un extra serviciu, pe un port separat şi gata. Sau chiar prin apache, un banal URL_REWRITE ar rezolva problema cred…

Nu rezolva problema, daca dai audit network, adica daca inspectezi traficul se vede de unde primeste date. Am incercat eu cu rewrite.

Teoretic suna bine, dar nu stiu unde gasesc astfel de proxy / nu stiu sa setez un proxy tunel,si nici nu cred ca multi pot face treaba asta.

Cel mai simplu şi mai cunoscut era într-o vreme Squid, cred că e şi acuma. Merge pe toate variantele de linux şi e plin netul de tutoriale şi documentaţie.

Nu am folosit demult, dar asta cred că ar merge.

Prima întrebare ar fi, dacă tot ai nevoie să treacă pe la tine, şi foloseşti lăţime de bandă, de ce nu le salvezi local pur şi simplu? Faci un crawler şi îţi faci o copie a librariilor video şi gata.

Ar fi nevoie de mai multe detalii ca să înţeleg exact ce vrei să faci.

Filme online. :grinning: Sa nu-mi sariti in cap, stiu ca sunt riscuri,vreau doar sa le diminuez,iar cele care raman mi le asum.

//
As face ca tine emanuel, dar iti dai seama ce spatiu mi-ar trebuie?

:smile: Filme online…

Costurile de a ascunde totul ar fi prea mari ca să merite. Nu rezolvi nimic oricum pe partea de securitate. Mai bine embeduieşti direct de la sursa originală şi plăteşti totul cu bitcoin şi la revedere :slight_smile:

Şi măcar mergi pe banda lor.

Cred,dar as vrea sa fiu diferit, cum era vplay :)). Nu stiu ce sa zic, ca majoritatea unde deja le uploadez, au reclame in player, defapt nu ca la youtube,e un fel de popup in acel iframe.Am incerc sa iau sursa cu file_get_contents din acel iframe,si sa scot cu regexp codul popup,insa totul e codat. :slight_smile: