[PHP] Content tonen en intussen functie uit blijven voeren

Pagina: 1
Acties:
  • 115 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

op een bepaalde pagina speel ik een film af. Dit doe ik met een mediaplayer object. De bezoeker heeft echter niet onbeperkt toegang tot deze film. Via een extern systeem wordt uit het htaccess file op mijn pagina het ip-adres van de bezoeker verwijdert op het moment dat deze geen recht op toegang meer heeft.

Ik controleer dit htaccess file met behulp van een functie die kijkt of het ip-adres van de bezoeker nog in dit bestand staan. Zo gauw deze functie false retourneert (en het ip-adres van de bezoeker dus niet gevonden wordt) mag de film niet meer te zien zijn en moet er dus een andere pagina worden geladen.

Ik dacht dit met onderstaande oplossing te kunnen doen, maar dit geeft niet het gewenste resultaat. Ik dacht namelijk dat met de onderstaande opzet eerst alle content die voor het controleproces komt eerst afgebeeld wordt, waarnaar de controlefunctie gewoon in zijn loop blijft draaien totdat de controlefunctie false retourneert. In plaats hiervan krijg ik echter ook de content (in dit geval de film) voor de controlefunctie niet te zien in de browser, maar blijft deze meteen al in de controlefunctie-loop zitten waardoor het laden van de pagina 'nooit stopt' en ik niks te zien krijg.

Hoe krijg ik het voor elkaar om toch de film te laten zien, maar wel tegelijkertijd de controle uit te voeren en zo gauw de controlefunctie false retourneert een andere pagina te laten zien?

Is mijn opzet met enige aanpassinge wel bruikbaar of moet ik een hele andere richting in denken?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<body>
<?
$REMOTE_ADDR=$_SERVER[REMOTE_ADDR];
$htaccess_file   = '.htaccess';  // .htaccess file 

// functie voor het controleren of ip nog toegang heeft
function IPCheck($ip) {
    global $htaccess_file;
    
    if($htaccess_file=='') 
        return true;
        
    $ip_allowed= strtolower(join(' ',file($htaccess_file)));
    $ip_okay   = strpos($ip_allowed, "allow from $ip") ? 1:0;
    return $ip_okay;
}

//kijken of ip uberhaupt toegang heeft
$okay      =IPCheck($REMOTE_ADDR);
?>

Hieronder dus een mediaplayer object dat de film afspeelt wat ik graag wil laten zien terwijl ik daarnaast wil controleren of IPCheck nog steeds true retourneert.

<object id="MediaPlayer" hier nog meer attributen>
  hier parameters
  <embed 
   hier parameters
  </embed>
</object>

<?
while($okay) 
{
    if($htaccess_file && (time()!=$last_time))
    {
        //Elke seconde controleren
        $last_time=time();
        $okay=IPCheck($REMOTE_ADDR);
    }    
    if($okay === false)
    {
        header("location: http://www.mijnpagina.nl/test.htm");
    }
}
?>
</body>

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Kun je hier niet beter een normale HTML-file van maken, en de film via een PHP-script laten streamen? Daarmee doe je gewoon met fopen en fread op een bepaalde snelheid de file uitlezen en afdrukken, en tussendoor zorg je dat de output buffer naar de browser gestuurd wordt. Op het moment dat de gebruiker alles gezien heeft wat ie mag zien, dan stop je gewoon met die file door te sturen, en loopt het script netjes ten einde.

Lijkt me in elk geval praktischer dan dit. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 20:37
sowieso kan je je header niet meer veranderen als je al content hebt verstuurd

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Sowieso kan die hele functie nooit false returnen. Wel 0. Als je gewoon == gebruikt is dat niet erg, maar === is een heel ander verhaal. Sowieso een beetje raar dat je een functie true, 1 of 0 laat returnen. En zet ook error_reporting eens aan en op E_ALL, want ik zie nog wat fouts dat je daarmee eruit kan halen.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 20:37
Die had ik nog niet eens bekeken :P

[ Voor 7% gewijzigd door OnTracK op 13-06-2006 19:59 ]

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Waarom kan je niet gewoon 2 films maken, 1 full en 1 preview, elke zelfstandige media player die ik ken probeert altijd alles te bufferen ( = downloaden ) voordat de gebruiker het te zien krijgt.

Dus of je kan een script gaan maken zoals -NMe- beschrijft en de downloadsnelheid aanpassen zodat mensen niet meer downloaden op een gegeven moment ( is gelijk einde film ) wat wel leuke dingen dingen oplevert als de downloadsnelheid even iets lager is aan clientkant.
Of je kan een extra workstation / proces inzetten wat gewoon dmv batchverwerking van alle filmpjes een preview erbij maakt.

Of je moet echt dynamisch een film willen kunnen onderbreken, maar dan moet je niet meer aan film gaan denken maar meer richting streaming, je streamt de film naar de client ( net zoals internet-tv / webcam etc ) en op een gegeven moment onderbreek je de stream gewoon. Maar voor php zou ik hier geen voorbeeld van weten.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor het meedenken!

Aan streamen heb ik ook zitten denken. Ik heb hier zelfs een script voor dat de stream verstuurt maar dit geeft voor mijn situatie niet het gewenste resultaat.
Ik wil namelijk graag de gebruiker binnen de browser de mogelijkheid geven om controle te hebben over het afspeelproces (pauze teruggaan enz.). Dit is essentieel voor de user interface die ik voor ogen heb. Het is voor mijn toepassing verder niet erg dat een zelfstandige speler als mediaspeler alles in het voren download. Het gaat er meer om dat de gebruiker geen toegang meer heeft tot die specifieke pagina en dus niet op de pagina blijft wanneer hij/zij geen recht meer heeft op toegang.

Ik wil dus graag een windows media player object in mijn browser laten zien dat de film afspeelt. Op het moment dat de gebruiker geen toegang meer heeft (te bepalen met de functie IPCheck, naar de fouten erin moet ik even kijken, bedankt voor de tip) moet de pagina waar het media player object staat verdwijnen en een andere pagina te voorschijn komen. Hier mag best een paar tellen vertraging tussen zitten, maar het liefste toch niet meer dan een 10 of maximaal 20 seconden.

Ik denk dat ik nu iets beter heb uit kunnen leggen wat ik voor ogen heb. Is zoiets te doen wat ik wil te doen met streaming of is er toch een manier te bedenken waarbij ik gebruik maak van een media player object waarbij ik tijdens het afspelen kan blijven controleren of de gebruiker nog recht op toegang heeft?

Nogmaals bedankt!!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de functie inmiddels aangepast en ik maak gebruik van :

set_time_limit(0);
ob_implicit_flush(1);
ob_end_flush();

en
flush();
ob_flush();

om de functie te kunnen laten draaien en toch de content (media player object) weer te geven. Het werkt nu dus op zich.
Zoals terecht opgemerkt werkt de header niet voor de redirect (dom van me) omdat de output al begonnen is. Ik doe dit nu met:

echo "<SCRIPT>window.location=http://www.mijnpagina.nl/test.htm'</script>";

Dit werkt op zich goed, maar ik zit nog even met het punt dat javascript niet bij iedereen aan zal staan cq zal werken. In dat geval blijft de bezoeker op de pagina omdat het script niet uitgevoerd wordt. Is er hiervoor nog een betere oplossing te bedenken (met PHP of iets anders)?

En zoals ik al vroeg is dit nu een goede oplossing (bij mij werkt ie prima) of zijn er nog betere (streaming ??)?

Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
PHP:
1
2
3
4
5
6
    if($htaccess_file=='') 
        return -1;
        
    $ip_allowed= strtolower(join(' ',file($htaccess_file)));
    return = strpos($ip_allowed, "allow from $ip") ? 1:0;
}
PHP:
1
2
3
4
5
6
7
while($okay>0) 
{
    //...
    if($okay>0) 
    {
        //...
    }

ziet er logischer uit. Met die -1 en evt. andere codes kan je dan nog aan errorhandling doen.

[ Voor 7% gewijzigd door moozzuzz op 14-06-2006 11:55 ]


Acties:
  • 0 Henk 'm!

  • teun-v
  • Registratie: Maart 2005
  • Niet online

teun-v

Koffie? ja graag...

Volgens mij wat jij wil kan niet als javascript is uitgeschakeld. Je zou mischien met javascript het een en ander zo kunnen bouwen dat als javascript is uitgeschakeld je niks te zien krijgt, maar dat helpt niet als je tussen tijds als de pagina al geladen is en javascript wordt uitgeschakeld.

Ik denk dat ik iets met flash zou maken dat een keer per 30 sec contact opneemt met je server om te kijken of er nog afgespeeld mag worden. Zodra dit niet meer mag flash een ander pagina laten openen.

Ook gek op Ovalracen? | Canon EOS 350 D | Canon EF-S 10-22mm F/3.5-4.5 | Sigma 17-70 F/2.8-4.5 DC Macro | Canon EF 70-200 F/2.8L USM | >Blog< |


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan ook de META refresh tag gebruiken, dat is volgens mij minder vaak uitgeschakeld.
Je zou ook een combinatie van verschillende technieken kunnen toepassen om maximale dekking te halen.

Acties:
  • 0 Henk 'm!

  • teun-v
  • Registratie: Maart 2005
  • Niet online

teun-v

Koffie? ja graag...

Verwijderd schreef op woensdag 14 juni 2006 @ 13:18:
Je kan ook de META refresh tag gebruiken, dat is volgens mij minder vaak uitgeschakeld.
Je zou ook een combinatie van verschillende technieken kunnen toepassen om maximale dekking te halen.
Zat ik ook al aan te denken alleen zal je stream dan onderbroken worden als hij/zij wel verder mag kijken. Flash is ook geen optie als je de player niet in flash intergreed en ik weet niet of dat kan met het media player object.

Ook gek op Ovalracen? | Canon EOS 350 D | Canon EF-S 10-22mm F/3.5-4.5 | Sigma 17-70 F/2.8-4.5 DC Macro | Canon EF 70-200 F/2.8L USM | >Blog< |


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 14 juni 2006 @ 13:18:
Je kan ook de META refresh tag gebruiken, dat is volgens mij minder vaak uitgeschakeld.
Je zou ook een combinatie van verschillende technieken kunnen toepassen om maximale dekking te halen.
Een meta refresh tijdens het afspelen van een filmpje lijkt me nogal ergernis opwekkend en vervelend. Denk niet dat gebruikers je zo'n keuze in dank afnemen. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij is er geen wezenlijk verschil tussen een javascrip redirect en een META tag redirect als de volgende:
code:
1
<meta http-equiv='refresh' content='0.1;URL=pagina2.htm'>


De TS wil volgens mij dat het kijken van het filmpje wordt afgebroken.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ja, maar laat dat dan wel door de server regelen, en niet door de client. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Tja als dat niet kan doordat er al output is verstuurd moet je toch een alternatieve oplossing verzinnen denk ik.

Acties:
  • 0 Henk 'm!

  • teun-v
  • Registratie: Maart 2005
  • Niet online

teun-v

Koffie? ja graag...

Verwijderd schreef op woensdag 14 juni 2006 @ 13:32:
Volgens mij is er geen wezenlijk verschil tussen een javascrip redirect en een META tag redirect als de volgende:
code:
1
<meta http-equiv='refresh' content='0.1;URL=pagina2.htm'>


De TS wil volgens mij dat het kijken van het filmpje wordt afgebroken.
Met java script kun je contact met de server opnemen zonder de pagina te herladen en pas als het moet de pagina opnieuw laden om de access deny bootschap te presenteeren.

dit kan met meta refresh "niet" zonder de stram te onderbreken wat niet pretig is. Wat eventueel wel zou werken is een frame set maken met 2 frames waar van een met de stream en een die de heletijd (15 sec) opnieuw laad. Als de gebruiker dan geen toegang meer heeft zou je iets met
HTML:
1
<META HTTP-EQUIV="Window-target" CONTENT="_top">
of
PHP:
1
header("Window-target: _top");
kunnen doen. Alleen weet ik niet of dit door iedere browser wordt ondersteund

edit: maar ik ben het idd met -NME- eens

[ Voor 7% gewijzigd door teun-v op 14-06-2006 13:46 ]

Ook gek op Ovalracen? | Canon EOS 350 D | Canon EF-S 10-22mm F/3.5-4.5 | Sigma 17-70 F/2.8-4.5 DC Macro | Canon EF 70-200 F/2.8L USM | >Blog< |


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Btw is het ook niet erg als ik de pagina zie, filmpje begint te spelen ( mediaplayer buffert complete film ) en na 10 seconden wordt de pagina veranderd, ik ga naar de temp internet files ( / koos in 1e instantie voor rechtermuis-knop opslaan ) en vis hier de complete film weer uit op (want media player had hem totaal gebufferd.

Denk toch dat je meer moet gaan kijken naar flash-oplossingen zoals google video etc, dan kan je volgens mij bereiken wat je hebben wilt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor het meedenken van iedereen!

Momenteel heb ik een oplossing draaien die werkt volgens een suggestie van teun-v. Ik werk nu met twee frames. In de ene (=onzichtbaar) draai ik een script dat steeds blijft controleren of de gebruiker nog toegang heeft. In het andere frame wordt de film afgespeeld. Het is overigens geen bezwaar dat wanneer de film eenmaal gebufferd is dat deze dan via de temp files weer opgezocht kan worden.

Zo gauw de gebruiker geen toegang meer heeft gebruik ik de volgende code om in het parent window de pagina weer te geven die men te zien krijgt als men geen toegang meer heeft:

code:
1
echo "<script>window.parent.location='../verbroken.php';</script>";


Dit werkt op zich natuurlijk prima, maar alleen als de gebruiker js aan heeft staan. Is er ook een oplossing met header die altijd werkt? Ik kan in dit geval header gebruiken omdat er verder geen content op de pagina staat die de check uitvoert dus een header verzenden is nog toegestaan.

Is er ook een mogelijkheid met meta refresh?

Deze suggesties:

html:
1
<META HTTP-EQUIV="Window-target" CONTENT="_top">

of
php:

1
<?
header("Window-target: _top");
?>

werken bij mij in ieder geval niet. Wat horen deze te doen? De pagina waar de code op staat in het parent window afbeelden ipv in het frame? Of vat ik dit toch verkeerd op?

Wat ik in ieder geval wil is verbroken.php tonen op het moment dat men geen recht meer heeft op toegang.

Nogmaals bedankt!!
Pagina: 1