php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.01.2010, 02:50  
Erfahrener Benutzer
 
Registriert seit: 29.08.2008
Beiträge: 755
halskrause wird schon bald berühmt werden
Standard Problem mit Ajax - Session Problem

Hi. Ich habe eine facebookApp geschrieben, die gelegentlich Probleme macht. Bei der App geht es um VideoUploads.
Systembeschreibung: Das Video ist bei Bestellung noch nicht fertig. Die kommt in ca. 40sek auf dem Server an. Daher habe ich das ganze mit Ajax(jQuery) und PHP gemacht.

Erst einmal die Codes:
Ajax(jQuery)
PHP-Code:
$(document).ready(function()
    {
    var size = 50;
    var uMatch;
    var refreshId = setInterval(function()
       {    
        $.ajax({
            type:     "GET",
            url:     "uCheck.php",
            data:     "uID=<?php echo $id;?>&randval="+ Math.random()+"&fbSession=<?php echo $_SESSION['session_key'];?>",
            success: function(msg){
                var getResponse = msg;
                if(getResponse  ==  "matched")
                    {
                     $('#proPro').fadeOut(2000,
                         function() { 
                             $('#proPro2').fadeIn(2000)
                             }
                     );
                     clearInterval(refreshId);
                    }
                else
                    {
                    size= size+1;
                    if(size >= 80)
                        {
                        //$(".welcomeSub").text(msg);
                        $('#proPro').fadeOut(2000,function() { 
                            $('#proError').fadeIn(2000)
                            });
                        clearInterval(refreshId);
                        }
                        else
                        {
                        //$(".welcomeSub").text(getResponse);
                        }
                    } // End of getResponse == "matched"
                } // End of "functionMsg?"
         });// End of $.ajax
        }, 16000);
    });
Und hier der PHP Code
PHP-Code:
<?php
session_start
();

// Getting the Date and checking for file
$uID    =    $_GET['uID'];
$files    =    glob('../videos/download/'.$uID.'.mp4');

if(
count($files) == 1)
    {
    
$size    =    floor(filesize('../videos/download/'.$uID.'.mp4')/1024);
    }
if(
$_SESSION['done'] == "OK")
    {
    die();
    }
if(
count($files) == 1  &&  isset($size)  &&  $size 300){
    
$_SESSION['done'] = "OK";

    .....
    .....
    .....

        
$file "../videos/download/".$uID.".mp4";
        
$args[basename($file)] = '@' realpath($file);
            
$ch curl_init();
            
$url 'http://api-video.facebook.com/restserver.php?method=facebook.video.upload';
            
curl_setopt($chCURLOPT_URL$url);
            
curl_setopt($chCURLOPT_HEADERfalse);
            
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
            
curl_setopt($chCURLOPT_POSTtrue);
            
curl_setopt($chCURLOPT_POSTFIELDS$args);
            
$data curl_exec($ch);

    echo 
'matched';
    }
    else{
    echo 
'not matched';
    }
?>
Das Problem: Ca. Jedes 15te mal wird das Video 2 bis 3 mal beim User hochgeladen. Ich habe vermutet, dass die Laufzeit (von PHP Script) gelegentlich mehr als 16sek. dauert. Das hängt ja auch von den Facebook Servern ab, da curl einen Response erwartet. Daher habe ich "$_SESSION['done'] = OK" in der If Bedingung deklariert. Auf jeden Fall ist nun so, dass ca. jedes 15te mal das Video 2mal verschickt wird.

Hat einer eine Idee, wie ich das Doppelversenden ganz verhindern kann?

Meine Vermutung: Kann es sein, dass die Deklaration von "$_SESSION['done']=OK" erst stattfindet, wenn die Laufzeit des gesamten Scriptes beendet wird?


PS: Wenn ihr ein Facebook Account habt, könnt ihr euch die App gern mal unter umaxxTV on Facebook anschauen. So wird das Problem verständlicher... Undzwar handelt es sich um die Seite mit dem Countdown.

Geändert von halskrause (10.01.2010 um 04:34 Uhr).
halskrause ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 10.01.2010, 12:41  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.201
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist ein sehr geschätzer MenschDark Guardian ist ein sehr geschätzer MenschDark Guardian ist ein sehr geschätzer MenschDark Guardian ist ein sehr geschätzer Mensch
Standard

Du könntest deinen Request in eine Funktion stopfen und erst im Callback wieder aufrufen. So sparst du dir das Session-Gefummel.

Code:
function request() {
        $.ajax({
            type:     "GET",
            url:     "uCheck.php",
            data:     "uID=<?php echo $id;?>&randval="+ Math.random()+"&fbSession=<?php echo $_SESSION['session_key'];?>",
            success: function(msg){
                         

                      if (whatever) {
                        request();
                      }
                } // End of "functionMsg?"
         });// End of $.ajax
}
Dann folgt der zweite Request erst wenn der erste beendet ist. Die if-Bedingung drum herum sollte sein, damit du per PHP Response diese Endlosschleife ggf. stoppen kannst.
__________________
Möglicherweise kommt zu "Menschen lügen" auch "Menschen bauen Mist".
Dark Guardian ist offline  
Alt 10.01.2010, 21:20  
Erfahrener Benutzer
 
Registriert seit: 29.08.2008
Beiträge: 755
halskrause wird schon bald berühmt werden
Standard

Danke für die Hilfe. ich versuche es mal mit der CallBack-Function indem ich beide Schritte (Ist Datei angekommen? UND VIDEO-UPLOAD ) trenne.

Eine generelle AjaxFrage. Sagen wir mal, dass das Script (uploadVideo) tatsächlich eine Laufzeit von 20-30 Sekunden hat. Wie verhält sich dieser, wenn der User die AjaxSeite eher verlässt? Würde das Script durchlaufen, oder abbrechen?
halskrause ist offline  
Alt 10.01.2010, 21:34  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von halskrause Beitrag anzeigen
Danke für die Hilfe. ich versuche es mal mit der CallBack-Function indem ich beide Schritte (Ist Datei angekommen? UND VIDEO-UPLOAD ) trenne.

Eine generelle AjaxFrage. Sagen wir mal, dass das Script (uploadVideo) tatsächlich eine Laufzeit von 20-30 Sekunden hat. Wie verhält sich dieser, wenn der User die AjaxSeite eher verlässt? Würde das Script durchlaufen, oder abbrechen?
Auch ajax schützt dich natürlich nicht davor dass wenn der User den Browser schließt oder auf eine andere Seite geht, dass dein Upload abbricht.
robo47 ist offline  
Alt 11.01.2010, 01:27  
Erfahrener Benutzer
 
Registriert seit: 29.08.2008
Beiträge: 755
halskrause wird schon bald berühmt werden
Standard

Gibt es keine Möglichkeit, dass der User den Script nur startet, und den Ablauf/Abbruch nicht mehr steuern kann?
Als Anfänger muss ich dabei an CronJobs denken die ja vom System gesteuert wird.
Die Berechtigung das Video in seinem Namen hochzuladen, habe ich ja schon von dem User vorher besorgt. Ich habe ein Zeitfenster von 30min.
halskrause ist offline  
Alt 11.01.2010, 08:02  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Du hast exakt keine Möglichkeit, einen Abbruch zu verhindern. Das, was du machen kannst, ist das Video erst einmal nur in einer Art Queue zu speichern. Und dann, wie bereits angemerkt von dir, mittels Cronjob hochzuladen. Der muss dann entsprechend oft laufen und die in der Queue befindlichen zu Facebook schicken.
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 11.01.2010, 14:22  
Erfahrener Benutzer
 
Registriert seit: 29.08.2008
Beiträge: 755
halskrause wird schon bald berühmt werden
Standard

Das mit mit der CallBack Funktion klappt nun ganz gut.
Ich bei nun bei 99% erfolgreich. Eine von 100 geht irgendwie flöten. Damit kann ich leben.

Ich habe einen vServer (Windows). Das Versenden von 800kb (Server => Facebook) dauert zur Zeit ca. 12 Sekunden. Normal ist das ja nicht, oder?
Kann man eigentlich irgendwo Einstellungen machen, damit diese Prozedur beschleunigt wird?
halskrause ist offline  
Alt 11.01.2010, 14:24  
Erfahrener Benutzer
 
Registriert seit: 26.10.2009
Beiträge: 425
PHP-Kenntnisse:
Fortgeschritten
Yoshi- befindet sich auf einem aufstrebenden Ast
Standard

Internetverbindung des Servers?
Yoshi- ist offline  
Alt 11.01.2010, 14:26  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Testest du schon online ? oder lokal auf deinem xampp ?

weil 800 / 12 ~ 66kb/s.

Ansonsten weis ich nicht was eventuell an validierung/überprüfung und soweiter hinter der API steckt bis die ihr okay zurückgibt.

Btw. ich dachte die ganze zeit es geht hier um irgendeine art user-upload, aber da das ja server-betrieben passiert kannst du mit PHP: ignore_user_abort - Manual da schon das ein oder andere machen.
robo47 ist offline  
Alt 12.01.2010, 02:08  
Erfahrener Benutzer
 
Registriert seit: 29.08.2008
Beiträge: 755
halskrause wird schon bald berühmt werden
Standard

Noch ne letzte Frage in diesem Thread, weil es sonst zu "offTopic" wird.
Wann ist eine Session deklariert?
Wenn der Compiler es gelesen hat, oder nach der Laufzeit des gesamten Scriptes?
halskrause ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SESSION Problem markbraue PHP-Fortgeschrittene 1 01.01.2009 14:49
Ajax Formular problem mit eingabe themonk JavaScript, Ajax und mehr 2 01.11.2008 20:25
Problem mit Session auf unterschiedlichen Servern dekom PHP Tipps 2008 6 10.10.2008 11:13
Problem bei session Lifetime Cyberbob_at_tot PHP Tipps 2007 5 05.06.2007 17:47
Problem mit Session Charly Shop Sui PHP Tipps 2006 13 25.08.2006 17:08
Und noch ein Session Problem... Weyoun PHP Tipps 2006 9 27.02.2006 22:17
Problem mit Firefox und Session PHP Tipps 2005-2 5 25.08.2005 01:14
Session wieder aufnehmen; Problem mit GET Jacks Rache PHP-Fortgeschrittene 9 12.08.2005 14:32
[Erledigt] Problem mit Session PHP Tipps 2005-2 1 06.08.2005 19:07
Problem mit Session PHP Tipps 2005-2 13 10.07.2005 18:20
seltsames php und session problem netti PHP-Fortgeschrittene 16 01.06.2005 17:01
[Erledigt] Hilfe...PhpBB Session Problem!! PHP Tipps 2004-2 2 15.12.2004 18:28
Session Problem beim Login PHP Tipps 2004-2 6 15.12.2004 09:37
[Erledigt] PHP Session Problem, dringend! PHP-Fortgeschrittene 17 21.10.2004 21:15
Session wird falsch wieder aufgenommen - Problem mit Session PHP Tipps 2004 2 16.10.2004 14:30

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-einsteiger/63197-problem-mit-ajax-session-problem.html, $_session ajax, ajax session, php ajax session-problem, php ajax session problem, php session_start ajax, ajax session id, jquery var session, facebook ajax fehler, firefox 3 video load ajax, problem facebook ajax upload, ajax script abbruch, ajax session url, php session ajax, ajax session aus url lesen, session ajax, php session countdown ajax, ajax $_session, jquery ajax php session, php session_start curl_init session 0

Alle Zeitangaben in WEZ +1. Es ist jetzt 12:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum