php.de

Zurück   php.de > Lösungen durch Skripte > Scriptbörse

Scriptbörse PHP Lösungen für nen schmalen Taler

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.05.2010, 21:42  
Neuer Benutzer
 
Registriert seit: 27.05.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Omnicron befindet sich auf einem aufstrebenden Ast
Standard post fsocket

Hallo,

ich würde gerne ein Upload-Script so umbauen das es vom eigenem Server oder von einem anderem Server Files einliest und verarbeitet.

Das Formular wie auch die Datei "upload.php" habe ich soweit verkürzt das der Code übersichtlicher wird und vor allem noch immer 100% arbeitet!

Das Forumlar sieht so aus:
Code:
<form method="post" action="/upload99.php" enctype="multipart/form-data" name="form_upload">
     <input id="upfile_0_id" type="file" name="upfile_0" value="" />
     <input type="submit" name="upload_action" value="page2" />
</form>
Die PHP-Datei (wichtigster Teil):
PHP-Code:
$upage 1;

// --> DATEN DES MEDIUMS

$media_format                    'photo'// "photo" oder "video"
$media_title                    'Test-Foto';
$media_description                'Dies ist ein Test-Foto';
$media_access                    'public'// "public" oder "private"
$media_tags                    'tag';
$mediaCategories                = array(13);
// <-- DATEN DES MEDIUMS

$upload_media_type                $media_format;
$filetype                        $media_format;


// Das passiert wenn das Form abgeschickt wird:
if (isset($_REQUEST['upload_action']))

    if (
$_REQUEST['upload_action'] == "page2")
    {
        unset(
$_SESSION["upload_newmedia"]); 
 
        
$arrNewMedia = array('upload_media_type' => $media_format'upload_media_title' => $media_title
                
'upload_media_description' => $media_description'upload_media_access' => $media_access
                
'upload_media_categories' => $mediaCategories,'upload_media_tags' => $media_tags
                
'media_location_longitude' => 0.0'media_location_latitude' => 0.0'media_location_zoom' => 1);
 
        
$_SESSION["upload_newmedia"] = $arrNewMedia;

        
$upage 2;
        
$mid convert_media($media_format);

        
// gibt die url mit dem mediakey auf seite 2 aus
        
$smarty -> assign("MEDIA_LINK"media_link($midNULL$arrNewMedia["upload_media_type"], $arrNewMedia["upload_media_title"]));
    }
}


if (
$upage == 1)
{
    
$presetMediaType_video false;
    
$presetMediaType_photo false;

    switch(
$presetMediaType)
    {
        case 
"photo":
            
$presetMediaType_photo true;
            break;
        case 
"video":
        default:
            
$presetMediaType_video true;
            break;
    }

    
$main -> loadBox($smarty"upload_info_page_1");
}

$smarty -> assign("upage"$upage);

$main -> EndScript($smarty -> fetch("content/upload99.tpl"), "");



function 
convert_media($format) {
    global 
$main$main$upage$dbconn$log$login$error_language$form
     
    
$log->verbose 10;

    
$legitFileFormats explode(" "$main->getConfig($format"_formats"));
    
$isFileFormatOk false;
    
$fileFormat "";

    
$uploadFile requestGPCVar('upfile_0'false'F');
    
$fsplit explode("."$uploadFile['name']);

    for(
$i=0$i<count($legitFileFormats); $i++) {
        if (
strtolower($fsplit[count($fsplit) - 1]) == $legitFileFormats[$i]) {
            
$fileFormat $legitFileFormats[$i];
            
$isFileFormatOk true;
            break;
        }
    }

    
$is_file_error "";
    return 
prepareFile($fileFormat);
}




function 
prepareFile($fileFormat){
    global 
$main$smarty$upage$dbconn$log$login$error_language$form$security;
    
// prepare new media entry 
     
    
$arrNewMedia $_SESSION["upload_newmedia"];

    
$sql "SELECT media_key FROM ".$dbconn->getTable('ost_media')." WHERE media_key = '%s'";
    do {
        
$media_key substr(md5(time().''.mt_rand(100000999999)), 020);
        
$media $dbconn->returnObject(sprintf($sql$media_key));
    } while (
$media != false);

    
$arr = array();
    
$arr["media_users_id"] = $login -> getId();
    
$arr["media_title"] = $arrNewMedia["upload_media_title"];
    
$arr["media_desc"] = str_replace("~NWLN~","\n",str_replace("~EQLS~","=",$arrNewMedia["upload_media_description"]));
    
$arr["media_duration"] = "0";
    
$arr["media_access"] = $arrNewMedia["upload_media_access"];
    
$arr["media_upload_date"] = $dbconn -> getTime();
    
$arr["media_key"] = $media_key;
    
$arr["media_type"] = $arrNewMedia["upload_media_type"];
    
$arr["media_conversion_status"] = "converting";
    
$arr["media_conversion_info"] = "Conversion startet..";
    
$arr["media_extention"] = $fileFormat;

    
$mid $dbconn -> easyInput("media"$arr); 
     
    
$activityData = array( 
        
'activity_users_id' => $login->getId(), 
        
'activity_action' => ACTIVITY_ACTION_UPLOAD_MEDIUM
        
'activity_action_id' => $mid
        
'activity_date' => $dbconn->getTime() 
    ); 
    
$dbconn->easyInput('activity'$activityData); 


    
$log->mid $mid;

    
$smarty->assign("MEDIAKEY"$arr["media_key"]);


    
$mediainfo = new MediaInformation();
    
$mediainfo -> setTagsRaw($mid$arrNewMedia["upload_media_tags"]);


    for (
$i=0$i<count($arrNewMedia["upload_media_categories"]); $i++) {
        
$arr = array();
        
$arr["categories2media_category_id"] = $arrNewMedia["upload_media_categories"][$i];
        
$arr["categories2media_media_id"] = $mid;
        
$dbconn -> easyInput("categories2media"$arr);
    }


    
$upage 1;

$uploadFile requestGPCVar('upfile_0'false'F');

//*************************************************************************************
//*************************************************************************************
    // Upload per POST
    
$move_func 'move_uploaded_file';
    
$uploaded_file $uploadFile['tmp_name'];
    
$error_field 'upfile_0';
//*************************************************************************************
//*************************************************************************************
 
     
    //*************************** start ***************************//
    
if ($arrNewMedia["upload_media_type"] == "video") { 
        
$tmp_file $main->getConfig('path_tmp'). $mid .'.tmpvideo';
        
        if (!
$move_func($uploaded_file$tmp_file)) { 
            
$form->setErrorField($error_field);
            
$main->setErrorMessage($error_language['upload_error_unknown_upload_error']);
        }
        else {
            if (
$main->getConfig('video_save_source_video'0)) {
                if (
is_dir('media/video_source/')) {
                    
copy($tmp_file'media/video_source/'$mid .'.'$fileFormat);
                }
            } 
             
            
startMediaConversion($mid); 
             
            
$log->append('Start video conversion'4);
            
$upage 2
        }
    }
    elseif(
$arrNewMedia["upload_media_type"] == "photo") {
        
$tmp_file $main->getConfig("path_tmp").$mid."_orig.".$fileFormat;
        
$jpg_file $main->getConfig("base_dir").$main->getConfig("storage_photo_path").$mid."_orig".$main->getConfig("conversion_target_photo");
        if(
$move_func($uploaded_file$tmp_file)) {
            
$imageResizer = new Images();
            
$imageResizer->generateImage($tmp_file$jpg_file);
            if(
$imageResizer->generatePhoto($tmp_file$mid)) {
                
$dbconn -> easyInput("media", array("media_conversion_status" => "success""media_conversion_info" => """media_extention" => $fileFormat"media_convert_extention" => substr($main->getConfig("conversion_target_photo"), 1)), "media_id = '".$mid."'");
                
media_ping('photo'$media_key); 
                
unlink($tmp_file);
                
$upage 2;
            }
            else {
                
$form -> setErrorField($error_field);
                
$main -> setErrorMessage($error_language["upload_error_image_conversion"]);
            }
        }
    }
    
//*************************** end ***************************//

    
return $mid;

Die Funktion requestGPCVar('upfile_0', false, 'F') ist in einer anderen Datei. Hier das wichtigste:
PHP-Code:
function requestGPCVar($name$default$valid_sources 'G'$accept_html FILTER_HTML$callback NULL) { 
    if (!
$length strlen($valid_sources)) { 
        return 
$default
    }

    
// If a file is requested, we handle it 
    
if (strpos($valid_sources'F') !== false) { 
        if (!isset(
$_FILES[$name])) { 
            return array( 
            
'name' => ''
            
'type' => ''
            
'size' => 0
            
'tmp_name' => ''
            
'error' => UPLOAD_ERR_NO_FILE 
            
); 
        } 
 
        return array( 
            
'name' => setGPCType($_FILES[$name]['name'], ''), 
            
'type' => setGPCType($_FILES[$name]['type'], ''), 
            
'size' => setGPCType($_FILES[$name]['size'], 0), 
            
'tmp_name' => setGPCType($_FILES[$name]['tmp_name'], ''), 
            
'error' => setGPCType($_FILES[$name]['error'], 0
        ); 
    }


Noch einmal zu meinem anliegen. Ich möchte den POST-Request umgehen wenn möglich oder wenn es sein muss mit fsocket eine Datei da reinbekommen.

Wie mache ich das? Habe erfolgreich den Code gekürzt und geändert. Meine PHP-Kenntnisse reichen aber nicht aus um das POST zu entfernen und dort direkt einen Pfad zu einer Datei anzugeben!

Danke für jede Hilfe!

Geändert von Omnicron (28.05.2010 um 16:04 Uhr).
Omnicron ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.05.2010, 08:24  
Erfahrener Benutzer
 
Registriert seit: 14.01.2010
Beiträge: 124
PHP-Kenntnisse:
Fortgeschritten
phpsecretary kann nur auf Besserung hoffen
Standard

Du willst eine Socketverbindung aufbauen? www.php.net/fsockopen

Um was gehts denn genau? Was willst du machen?

Ist mir noch zu früh für scripts > 20 Zeilen...
phpsecretary ist offline   Mit Zitat antworten
Alt 28.05.2010, 16:00  
Neuer Benutzer
 
Registriert seit: 27.05.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Omnicron befindet sich auf einem aufstrebenden Ast
Standard

ja kann eine socket verbindung sein. oder einfach die stelle wo das script das file einliest.
also an der stelle wo das script das file via $_REQUEST bekommt einfach es mit FOPEN einlesen oder sowas.

das ist ein upload-script für videos und fotos.

ich möchte das gerne automatisieren. da nach dem upload die medien konvertiert werden, sehe ich keine möglichkeit das anderst zu machen.
Omnicron ist offline   Mit Zitat antworten
Alt 28.05.2010, 16:25  
Neuer Benutzer
 
Registriert seit: 27.05.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Omnicron befindet sich auf einem aufstrebenden Ast
Standard

ich hatte das heute nacht einmal mit der snoopy.class ausprobiert.
geht ganz gut, nur muss dort glaube ich das file auch erst in ($_FILE)-Array zerlegt werden, da sonst bei Dateien grösser als 3,2 MB der Fileupload nicht klappt.

PHP-Code:
$filename '1198.flv';

$snoopy = new Snoopy();
$snoopy->set_submit_multipart();
$postVars = array();
$postVars['upload_action'] = 'page2';

$postFiles = array();
$postFiles['upfile_0'] = dirname(__FILE__) . '/' $filename;
$snoopy->submit('http://127.0.0.1/upload99.php?d_filename=' time(), $postVars$postFiles);


echo 
"<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n"
Also klappt ganz gut, wenn das File nicht grösser ist als 3,2 MB.

Ich muss aber Files versenden die bis 750MB haben.
Omnicron ist offline   Mit Zitat antworten
Alt 28.05.2010, 23:15  
Erfahrener Benutzer
 
Registriert seit: 14.01.2010
Beiträge: 124
PHP-Kenntnisse:
Fortgeschritten
phpsecretary kann nur auf Besserung hoffen
Standard

Irgendwie habe ich deine Logik nicht verstanden.

Du hast ein Formular.
Der Nutzer füllt das Formular aus und wählt dazu auch eine Datei von seinem lokalen Rechner aus.
Jetzt willst du anstatt die Datei (die ja eh schon an den Webserver verschickt wurde) weiter zu verarbeiten lieber eine (Socket-) Verbindung zum Clientrechner aufmachen um die Datei noch einmal einzulesen (weil du ein Problem mit der HTTP Methode Post vermutest?).

Wäre es nicht einfacher den Webserver so zu konfigurieren, dass dieser auch den Upload größerer Dateien erlaubt und das Script so zu lassen wie es ist?

Howto optimize your PHP installation to handle large file uploads (das Applet von deren Seite würde ich einfach mal ignorieren aber in jedem Fall auf die php.ini Einstellungen achten)

Geändert von phpsecretary (28.05.2010 um 23:18 Uhr).
phpsecretary ist offline   Mit Zitat antworten
Alt 29.05.2010, 05:48  
Neuer Benutzer
 
Registriert seit: 27.05.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Omnicron befindet sich auf einem aufstrebenden Ast
Standard

Nein, ich möchte das Upload-Formular umgehen weil ich einen Batch-Uploader bauen möchte.
Omnicron ist offline   Mit Zitat antworten
Alt 30.05.2010, 17:13  
Neuer Benutzer
 
Registriert seit: 14.04.2010
Beiträge: 26
PHP-Kenntnisse:
Fortgeschritten
aschunk befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

warum benutzt du keine Datenbank?

Dann brauchst du nicht das ganze drum herum mit den Arrays usw.
aschunk ist offline   Mit Zitat antworten
Alt 01.06.2010, 05:30  
Neuer Benutzer
 
Registriert seit: 27.05.2010
Beiträge: 5
PHP-Kenntnisse:
Anfänger
Omnicron befindet sich auf einem aufstrebenden Ast
Standard

Also ich erkläre das noch einmal genauer.

Ich habe ein Upload-Script, den Code sieht man oben, um Videos und Fotos auf eine Seite zu laden.
Desweiteren habe ich eine Datenbank mit den Server-Adressen wo die Videos und Fotos liegen. Diese befinden auf dem selben Server wie das Script, wie auch auf einem anderem Server. Diese Datenbank ändert sich alle 30 Minuten da sich die SESSIONS zu den Files ändern, ausser du bist am saugen von so einem File, dann bleibt die SESSION erhalten bis das File fertig gesaugt wurde.

Im ganzen sind das in etwa 250.000 Videos und Fotos. Ich muss jetzt irgendwie das oben genannte Script so umbauen das ich den POST-Request umgehe.
Also ich muss nur wissen wie ich dem Script sagen kann das er von einer bestimmte Adresse ein File nimmt und nicht über den POST-Request.

Die Variablen sind ja auf das POST ausgelegt.

Also

$FileAufServer = "http://server.de/file.jpg oder /var/www/files/file.jpg";

Die einzelnen Adressen lasse ich dann natürlich von der Datenbank ausgeben! Das Script habe ich bereits dafür. Ich weiss nur nicht wie ich den Post übergehe

Vielen Dank für Hilfe
Omnicron ist offline   Mit Zitat antworten
Antwort


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
Mit POST aufgerufene Seiten automatisch auslesen ohne ein Formular zu benutzen slmephi PHP Tipps 2009 5 21.08.2009 08:45
Status code auf HTTP POST zurückgeben radiv PHP Tipps 2009 2 05.06.2009 18:58
[Erledigt] PHP Post protokollieren radiv PHP-Fortgeschrittene 12 02.06.2009 19:35
Post Weiterleitung smilla PHP Tipps 2009 4 19.03.2009 19:30
[Erledigt] curl post GTA26 PHP Tipps 2009 1 11.03.2009 20:09
Curl Post Problem GTA26 PHP Tipps 2009 2 10.03.2009 23:16
quelle der POST daten in php script herausfinden ArchEnemy PHP Tipps 2009 11 26.02.2009 02:32
POST manipulieren notyyy PHP Tipps 2006 5 24.09.2006 20:31
POST Daten ohne Formular übergeben? &lt;Daniel&gt; PHP Tipps 2006 8 19.06.2006 14:34
Post Formular automatisch weiterleiten mansaylon PHP Tipps 2006 7 31.03.2006 10:46
mit php post übergeben PHP-Fortgeschrittene 1 11.10.2005 13:12
POST socke PHP Tipps 2005 5 25.04.2005 12:52
Mit post an weitere Seite oder 2 Seiten übergeben? PHP Tipps 2005 1 02.02.2005 12:16
Linux Drucker unter Windows tennessee Server, Hosting und Workstations 10 16.12.2004 17:14
GET vor POST ? PHP-Fortgeschrittene 17 26.11.2004 13:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
requestgpcvar, startmediaconversion, requestgpcvar php, fsocket php, $sql = \select media_key from \.$dbconn->gettable(\'ost_media\').\ where media_key = \'%s\', formular mit php absenden fsockets, media_convert_extention is null, media_conversion_info conversion startet.., fsocket, curl $_files batch

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:07 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