php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 08-11-2010, 09:34
mainclain
 Registrierter Benutzer
Links : Onlinestatus : mainclain ist offline
Registriert seit: Dec 2006
Beiträge: 58
mainclain ist zur Zeit noch ein unbeschriebenes Blatt
mainclain eine Nachricht über ICQ schicken
Standard Videostreams über download.php

Hallo,
habe bisher nichts dazu gefunden und hänge da schon seit Tagen dran fest :/
Also mein Problem:
Ich habe eine Internetseite auf der ich einige Videos laufen lasse. Damit unbefugte sie nicht einfach downloaden können, lass ich den download über eine download.php laufen.
Diese überprüft ob derjenige eingeloggt ist und gibt dann die Datei raus.

So der Videostream ansich geht auch, es wird alles korrekt angezeigt Sound ist auch da, das Problem ist: Die Internet-Seite hängt danach.
Wenn ich also mein Video starte (und dieses somit läd) kann ich auf keine andere Seite mehr gehen. (unendlich laden)

Leider hat alles was ich bisher versucht habe nichts geholfen

PHP-Code:
header("HTTP/1.1 200 OK");
    
header('Last-Modified: ' date('r'$stat['mtime']));
    
header("Etag: \"".$etag."\"");
    
header("Content-Disposition: attachment; filename=\"".$filename[1]."\"");
    
header("Accept-Ranges: bytes");
    
header("Connection: Keep-Alive");
    
header("Keep-Alive: timeout=5, max=83");
    
header("Content-Type: ".mime_content_type($file));

    
readfile($file); 
Dann hatte ich noch von php.net

PHP-Code:
function smartReadFile($location$filename$mimeType='application/octet-stream')
{
    if(!
file_exists($location))
    {
        
header ("HTTP/1.0 404 Not Found");
        return;
    }

  
$size=filesize($location);
  
$time=date('r',filemtime($location));

  
$fm=@fopen($location,'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');

  
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;
  }

Diese Code gefunden. Das Problem hier: Opera und Safari scheinen das HTTP/1.0 206 Partial Content zu benutzen, also eine HTTP_RANGE zu schicken, Firefox und IE leider nicht (Zumindest so wies mir vorkommt).
Mit diesem Code geht das verlinken zumindest bei Opera und Safari.

Weiß langsam nicht mehr weiter, googeln und Boardsuche haben mich leider auch nicht viel weiter gebracht.

Hoffe ihr habt da eine Idee.
Mit Zitat antworten
  #2 (permalink)  
Alt 08-11-2010, 09:44
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

das Problem bei deinem Code ist, dass du dem Browser mitteilst, er könne den Download portionieren, also auch später wiederaufnehmen (Accept-Ranges-Header). Wenn er sich darauf verlässt, was er ja durchaus darf, schiebst du ihm aber wieder die komplette Datei unter und das dann eben mehrmals.

Entweder du setzt diesen Header auf "none" (partial content nicht unterstützt) und lässt ihn einmal die komplette Datei saugen oder du nimmst den unteren Code (empfohlen!) und unterstützt damit partial content korrekt. Ob das der Browser dann in Anspruch nimmt, musst du ihm überlassen.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 08-11-2010, 09:48
mainclain
 Registrierter Benutzer
Links : Onlinestatus : mainclain ist offline
Registriert seit: Dec 2006
Beiträge: 58
mainclain ist zur Zeit noch ein unbeschriebenes Blatt
mainclain eine Nachricht über ICQ schicken
Standard

Okay, wie schon geschrieben, auch beim Unterem Code gibts Probleme mit Firefox und Internetexplorer.
Müsste ich daran noch etwas ändern?

Bzw. sollte ich beim Unteren Code
PHP-Code:
header('Accept-Ranges: bytes');
  
header('Content-Length:'.($end-$begin));
  
header("Content-Range: bytes $begin-$end/$size"); 
Nur mit reinnehmen wenn auch partial content angefragt, also HTTP_RANGE gesetzt ist?



Mit Zitat antworten
  #4 (permalink)  
Alt 08-11-2010, 09:56
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Der Code an sich sieht richtig aus, getestet habe ich ihn aber nicht. Auch rausnehmen musst du diese Header für komplette Abfragen nicht. Kannst du die Ursache für die Probleme im Firefox vielleicht noch näher erläutern? Vielleicht auch mal mit deinem Code für den Aufruf der smartReadFile-Funktion?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 08-11-2010, 10:07
mainclain
 Registrierter Benutzer
Links : Onlinestatus : mainclain ist offline
Registriert seit: Dec 2006
Beiträge: 58
mainclain ist zur Zeit noch ein unbeschriebenes Blatt
mainclain eine Nachricht über ICQ schicken
Standard

Hmm, erläutern... schwierig xD
Also ich gehe auf meine seite, und fange an das Video zu laden. (Wirklich erst nach dem ich aufs Video geklickt hab) Danach versuche ich auf einen weiteren Link zu gehen beispielsweise
von index.php zu list.php und dann läd er ins unendliche, also ladebalken bei Firefox kommt unten, aber es tut sich nichts sondern bleibt immer leer.

Ein kleiner Fehler im Code ist mir noch aufgefallen
PHP-Code:
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]);
      } 
Da müsste matches[1] begin und matches[2] ende sein oder?
Index 0 steht ja eigentlich immer für den gesamten Ausdruck.
Mal sehn ob sich dadurch was verändert.
Edit: Okay ändert sich nichts :/

Der aufruf an sich:
PHP-Code:
smartReadFile($filepathbasename($filepath), mime_content_type($filepath)); 

Geändert von mainclain (08-11-2010 um 10:11 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 08-11-2010, 10:17
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ja, du hast recht in Bezug auf die Indizes des $matches-Arrays. Du testest ja bestimmt auf einem lokalen Webserver. Lässt der eventuell nur eine Verbindung gleichzeitig zu? Schau mal in der httpd.conf nach ThreadsPerChild und MaxRequestsPerChild.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 08-11-2010, 10:48
mainclain
 Registrierter Benutzer
Links : Onlinestatus : mainclain ist offline
Registriert seit: Dec 2006
Beiträge: 58
mainclain ist zur Zeit noch ein unbeschriebenes Blatt
mainclain eine Nachricht über ICQ schicken
Standard

ThreadsPerChild:250
MaxRequestsPerChild:0

Was genau bedeutet eine Verbindung? Ich kann ja auch gleichzeitig mit 2 Browsern drauf - Als IE lad ich beispielsweise das Video, FF spring ich auf der seite umher
Mit Zitat antworten
  #8 (permalink)  
Alt 08-11-2010, 11:00
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Mh, dann fällt mir erstmal auch nichts mehr ein, außer dass vielleicht ein Firefox-Add-On da irgendwie dazwischen funkt. Du kannst ja alle mal temporär deaktivieren oder den Firefox über den Safe-Mode-Link starten.

Edit: Achso, außerdem kannst du versuchen, mal Connection: close zu senden, statt keep-alive und den Keep-Alive-Header ganz rausnehmen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 08-11-2010, 11:02
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

worker - Apache HTTP Server
mpm_common - Apache HTTP Server
Mit Zitat antworten
  #10 (permalink)  
Alt 08-11-2010, 11:22
mainclain
 Registrierter Benutzer
Links : Onlinestatus : mainclain ist offline
Registriert seit: Dec 2006
Beiträge: 58
mainclain ist zur Zeit noch ein unbeschriebenes Blatt
mainclain eine Nachricht über ICQ schicken
Standard

Die Links hatte ich mir auch schon rausgesucht, trotzdem danke dafür ^.^

Wegen dem Connection: Close - Wird doch bei der 2. Funktion standartmäßig gesendet.
PHP-Code:
header('Connection: close'); 
Auch Addons ausstellen hat leider nicht geklappt :/ (Bei IE hab ich ja sowieso keine xD)

Mit dem Firefox addon Live HTTP headers wird folgendes als Response gegeben:

Code:
HTTP/1.0 200 OK
Date: Mon, 08 Nov 2010 10:19:02 GMT
Server: Apache/2.2.8 (Ubuntu) PHP/5.3.3-0.dotdeb.1 with Suhosin-Patch mod_ssl/2.2.8 OpenSSL/0.9.8g
X-Powered-By: PHP/5.3.3-0.dotdeb.1
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: public, must-revalidate, max-age=0
Pragma: no-cache
Accept-Ranges: bytes
Content-Length: 778637051
Content-Range: bytes 0-778637051/778637051
Content-Disposition: inline; filename=video.flv
Content-Transfer-Encoding: binary
Last-Modified: Wed, 03 Nov 2010 23:46:46 +0100
Connection: close
Content-Type: video/x-flv

Geändert von mainclain (08-11-2010 um 11:27 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 08-11-2010, 14:32
mainclain
 Registrierter Benutzer
Links : Onlinestatus : mainclain ist offline
Registriert seit: Dec 2006
Beiträge: 58
mainclain ist zur Zeit noch ein unbeschriebenes Blatt
mainclain eine Nachricht über ICQ schicken
Standard

Noch kurz eine Sache: Wenn ich statt auf eine php seite nach dem Laden des Videos auf eine HTML seite gehe, scheint alles ordnunggemäß zu funktionieren :/

Kann es an den PHP-Einstellungen liegen? Das das PHP script erst ausgeführt wird wenn das andere (download.php) beendet wurde? (Nur komisch das es parallel mit mehreren Browsern klappt)


Achja am Player liegts sicher auch nicht xD Hab flowplayer und JWPlayer ausprobiert, beide gingen nicht.

Geändert von mainclain (08-11-2010 um 14:35 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 08-11-2010, 14:55
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mainclain Beitrag anzeigen
Damit unbefugte sie nicht einfach downloaden können, lass ich den download über eine download.php laufen.
Diese überprüft ob derjenige eingeloggt ist
Und das machst du wie genau - über Sessions vielleicht?

Falls ja, dann ist der Fall klar - die geöffnete Session-Datei ist gelockt, andere Scripte, die ebenfalls die Session nutzen, können nicht darauf zugreifen, so lange das andere Script noch läuft.

Lösung: Nach dem Prüfen der Zugriffsberechtigung, vor dem Ausliefern der Video-Daten, session_write_close aufrufen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #13 (permalink)  
Alt 08-11-2010, 15:02
mainclain
 Registrierter Benutzer
Links : Onlinestatus : mainclain ist offline
Registriert seit: Dec 2006
Beiträge: 58
mainclain ist zur Zeit noch ein unbeschriebenes Blatt
mainclain eine Nachricht über ICQ schicken
Standard

Werde ich mal probieren, danke ^.^
Allerdings gibts den Fehler auch wenn ich einfach auf eine Seite linke wie:
test.php
-> <?php echo "test"; ?>
bei einer
test.html
ist der Fehler aber nicht, kanns trotzdem dran liegen?
Das mit Session closen werd ich trotzdem mal versuchen, danke ^.^



Edit: Haha danke, genau das war die Lösung.
Naa super, vielen viel dank, hab gar nicht dran gedacht, das die Sessions das Problem sein könnte ^.^
Auch an alle anderen, vielen Dank für eure bemühungen

Geändert von mainclain (08-11-2010 um 15:12 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 10-11-2010, 20:24
mainclain
 Registrierter Benutzer
Links : Onlinestatus : mainclain ist offline
Registriert seit: Dec 2006
Beiträge: 58
mainclain ist zur Zeit noch ein unbeschriebenes Blatt
mainclain eine Nachricht über ICQ schicken
Standard

Nun hab ich doch noch ein Problem.
Ich hab mein Video als mp4 gespeichert, leider kann ich dieses nicht abspielen.
Nun dachte ich liegts an meinen player, hab nun mit mein iphone getestet und einen einfachen Link eingebaut.
Direkter Link zum Video: anzeige klappt; über die download.php gehts nicht - er sagt Video kann nicht angezeigt werden.
Jemand eine Ahnung woran es liegen könnte?

Beim PC kann ich über den download link das ganze Aufrufen, über den Player aber auch nicht :/


Ich habs bis jetzt leider nicht hinbekommen
Nun hab ich allerdings eine Möglichkeit gefunden die nicht ganz so gut ist.
Da das Problem nur bei Iphone auftrat, habe ich eine extra funktion für iphone erstellt.
Hierbei wird jedes mal aufruf meiner Seite die IP überprüft und in eine .htaccess datei geschrieben, wenn noch nicht vorhanden. (Nur bei IPHONE, bzw. Mobile Versionen)
So hat der iphone nutzer vollen zugriff auf den Files ordner.
Das ganze ergänze ich nun noch mit einer Datenbank verbindung, inder ich die Zeiten schreibe und lösche nach einer bestimmten zeit die ip wieder aus der htaccess hinaus.

Geändert von mainclain (12-11-2010 um 22:42 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Download Script basierend auf download Codes LionheartRec Apps und PHP Script Gesuche 0 19-12-2009 09:21
Wie kann ich eine "Danke für den Download" Seite nach einem Download aufrufen? hitzi PHP Developer Forum 6 31-10-2005 10:26
download von verschiedenen dokumenten über ein formular? goodrun PHP Developer Forum 1 18-05-2005 12:10
Download Redirection für Videos ohne das der MediaPlayer den Download übernimmt mcdbpas Apps und PHP Script Gesuche 0 13-07-2004 17:31
Webkatalog mit über 450 Anbietern zum Download cosinus User pages 1 26-02-2003 16:54

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:49 Uhr.