Ankündigung

Einklappen
Keine Ankündigung bisher.

post fsocket

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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!

  • #2
    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...

    Kommentar


    • #3
      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.

      Kommentar


      • #4
        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.

        Kommentar


        • #5
          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)

          Kommentar


          • #6
            Nein, ich möchte das Upload-Formular umgehen weil ich einen Batch-Uploader bauen möchte.

            Kommentar


            • #7
              Hallo,

              warum benutzt du keine Datenbank?

              Dann brauchst du nicht das ganze drum herum mit den Arrays usw.

              Kommentar


              • #8
                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

                Kommentar

                Lädt...
                X