Ankündigung

Einklappen
Keine Ankündigung bisher.

Array to String conversion - Anfänger sucht rat

Einklappen

Neue Werbung 2019

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

  • Array to String conversion - Anfänger sucht rat

    Hallo zusammen ich habe versucht aus zwei PHP scripts eines zu machen mit folgendem Ziel. Das Script soll in einem Ordner die aktuellste Datei suchen und diesen Wert bzw. den Dateinamen an eine Datenbank zusammen mit einem Token übergeben für den Filedownload innerhalb von 24 Stunden.

    PHP-Code:
    <?PHP  

    $directory 
    '../otd/downloads'

    function 
    lastModification $dir$todo 'new'$format 'd.m.Y H:i:s' ) { 
         
        if ( 
    is_file $dir ) ) 
            return 
    false
             
        
    $lastfile ''
         
        if( 
    strlen$dir ) - != '\\' || strlen$dir ) - != '/' 
            
    $dir .= '/'
             
        
    $handle = @opendir$dir ); 
         
        if( !
    $handle 
            return 
    false
             
        while ( ( 
    $file readdir$handle ) ) !== false ) { 
             
            if( 
    $file != '.' && $file != '..' && is_file $dir.$file ) ) { 
                 
                if ( 
    $todo == 'old' ) { 
                     
                    if( 
    filemtime$dir.$file ) <= filemtime$dir.$lastfile ) ) {
                         
                           
    $lastfile $file
                            
                     } 
                      
                } 
                else { 
                     
                    if( 
    filemtime$dir.$file ) >= filemtime$dir.$lastfile ) ) {
                         
                           
    $lastfile $file
                            
                     } 
                     
                } 
                 
                if ( empty( 
    $lastfile ) ) 
                    
    $lastfile $file
                 
            } 
           
        } 
         
        
    $strKey2['file'] = $lastfile
          
        
    closedir$handle ); 

          return 
    $strKey2
             


    //connect to the DB
    $resDB mysql_connect("xxx""xxx""xxx");
    mysql_select_db("xxx"$resDB);

    function 
    createKey(){
        
    //create a random key
        
    $strKey md5(microtime());
        
        
    //check to make sure this key isnt already in use
        
    $resCheck mysql_query("SELECT count(*) FROM downloads WHERE downloadkey = '{$strKey}' LIMIT 1");
        
    $arrCheck mysql_fetch_assoc($resCheck);
        if(
    $arrCheck['count(*)']){
            
    //key already in use
            
    return createKey();
        }else{
            
    //key is OK
            
    return $strKey;
        }
    }

    //get a unique download key
    $strKey createKey();

    //get last file name
    $strKey2 lastModification$directory );

    //insert the download record into the database - Time is: (time()+(60*60*24*7) 60sek X 60min X 24h X 7 Tage = 7 Tage
    mysql_query("INSERT INTO downloads (downloadkey, file, expires) VALUES ('{$strKey}', '{$strKey2}', '".(time()+(60*60*24))."')");

    ?>

    <html>
        <head>
            <title>Printcom One Time Download Token</title>
        </head>
        <h1>One Time Download</h1>
        <p>Ihre unique download URL ist:</p>
        <strong><a href="download.php?key=<?=$strKey;?>">download.php?key=<?=$strKey;?></a></strong>
        <p>Dieser Link ist 24 h gültig.</p>
    </html>
    Wenn ich die Seite aufrufe kommt einfach nur: Notice: Array to string conversion in ... Zeile 85 - also dort wo ich den {strKey2} mit übergebe in die Datenbank. Und in der Datenbank steht im entsprechenden Feld einfach nur Array und nicht der Dateiname.

    Kann mir hierfür bitte jemand einen Hinweis geben - ich habe wirklich leider absolut keine Ahnung. Vielen lieben Dank

  • #2
    Hi mrniceguy1977,

    in deiner Funktion lastModification( $directory ) gibst du ein Array zurück.

    PHP-Code:
    . . .
    $strKey2['file'] = $lastfile;  
    closedir$handle );  
    return 
    $strKey2;
    . . . 
    Dieses Array weist du einer Variablen zu.

    PHP-Code:
    $strKey2 lastModification$directory ); 
    Wenn ich das mal so übernehme (die mySQL-Funktionen auskommentiert) . . .

    PHP-Code:
    function createKey(){ 
        
    //create a random key 
        
    $strKey md5(microtime()); 
         
        
    //check to make sure this key isnt already in use 
        //$resCheck = mysql_query("SELECT count(*) FROM downloads WHERE downloadkey = '{$strKey}' LIMIT 1"); 
        //$arrCheck = mysql_fetch_assoc($resCheck); 
        
    if($arrCheck['count(*)']){ 
            
    //key already in use 
            
    return createKey(); 
        }else{ 
            
    //key is OK 
            
    return $strKey
        } 


    //get a unique download key 
    $strKey createKey(); 

    //get last file name 
    //$strKey2 = lastModification( $directory ); 
    $files['file'] = "eine_datei.jpg";

    $strKey2 $files;
    //insert the download record into the database - Time is: (time()+(60*60*24*7) 60sek X 60min X 24h X 7 Tage = 7 Tage 
    $query "INSERT INTO downloads (downloadkey, file, expires) VALUES ('{$strKey}', '{$strKey2}', '".(time()+(60*60*24))."')";
    echo 
    $query
    . . . und die Abfrage in einer Variablen ablege und diese ausgebe, so lautet das Ergebnis:

    INSERT INTO downloads (downloadkey, file, expires) VALUES ('70e340f18e55576969fb868e2c0eb5ed', 'Array', '1416512787')

    Und die Zeichenkette 'Array' wird eingetragen.

    Übergib also nicht nur das Array, sondern auch den Key . . .

    PHP-Code:
    $query "INSERT INTO downloads (downloadkey, file, expires) VALUES ('{$strKey}', '{$strKey2[file]}', '".(time()+(60*60*24))."')"
    Ausgabe $query:

    INSERT INTO downloads (downloadkey, file, expires) VALUES ('293bdc9e9496861908de5504dc7f852d', 'eine_datei.jpg', '1416513270')

    Gruß
    Günni

    Kommentar


    • #3
      Hallo Günni

      Danke für den Hinweis, aber da ich mich aktuell nun das erste mal mit so etwas auseinander setze wäre ich froh wenn Du mir eventuell den Code für mich passend machen könntest. Da ich zwar das Code Segment hier verstehe:

      PHP-Code:
      //get last file name  
      //$strKey2 = lastModification( $directory );  
      $files['file'] = "eine_datei.jpg"

      $strKey2 $files
      Aber dadurch habe ich ja in deinem Beispiel nun den fixen Namen "eine_datei.jpg" ich möchte aber die letzte Datei die auf den Server in ein bestimmtes Verzeichnis kopiert wurde als Übergabe Namen erhalten.

      Wenn ich also versuche (bitte mitleid mit den Doofen ):
      PHP-Code:
      //get last file name
      $files['file'] = lastModification$directory );
      $strKey2 $files
      Dann bleibt der Fehler der selbe. Wie gesagt ich mache das zum ersten mal und bin kein Programmierer und wäre echt froh wenn Du mir hier kurz weiter helfen könntest.

      Danke

      Kommentar


      • #4
        Warum gibst Du nicht einfach $lastfile aus Deiner Funktion zurück?
        Hab mir die Funktion im Detail nicht angeschaut, aber per Definition gehe ich mal davon aus, daß Du in $lastfile den Dateinamen der aktuellsten Datei in dem Verzeichnis erwartest.

        Folgendes könntest Du vielleicht nochmal differenzieren:
        Aber dadurch habe ich ja in deinem Beispiel nun den fixen Namen "eine_datei.jpg" ich möchte aber die letzte Datei die auf den Server in ein bestimmtes Verzeichnis kopiert wurde als Übergabe Namen erhalten.
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Hallo Arne

          ja genau ich möchte im Grunde die neuste Datei im Verzeichnis mitsamt dem downloadkey sowie dem Ablauf Datum in die Datenbank eintragen.

          Aber dadurch habe ich ja in deinem Beispiel nun den fixen Namen "eine_datei.jpg" ich möchte aber die letzte Datei die auf den Server in ein bestimmtes Verzeichnis kopiert wurde als Übergabe Namen erhalten.
          Damit ist gemeint das ein anderer helfender Kollege mir ja im 2 Post versucht hat zu helfen und mir geschrieben hatte:

          INSERT INTO downloads (downloadkey, file, expires) VALUES ('70e340f18e55576969fb868e2c0eb5ed', 'Array', '1416512787')

          Und die Zeichenkette 'Array' wird eingetragen.

          Übergib also nicht nur das Array, sondern auch den Key . . .
          Nur hat sich dieser eben auf einen festen Wert (eine_datei.jpg) bezogen siehe hier:
          PHP-Code:
          //get last file name  
          //$strKey2 = lastModification( $directory );  
          $files['file'] = "eine_datei.jpg"

          $strKey2 $files
          Und ich benötige aber immer die aktuellste Datei sprich einen variablen Wert.

          Sorry ich weiss vielleicht sollte ich mich mehr damit auseinander setzten aber ich bin kein Programmierer und ich bin schon froh das ich die Paar Zeilen für meine Bedürfnisse konnte anpassen.

          Vielleicht kann mir bitte einfach jemand den code aus dem ersten post so modifizieren damit er funktioniert und nicht statt dem Dateinamen das Wort Arry in die Datenbank geschrieben wird.

          Danke

          Kommentar


          • #6
            Naja, Günni hat halt zum Verständnis einen Dateinamen statisch vergeben.
            Darüber hat er doch nur Deine Zeilen auskommentiert.

            Lass Dir einfach $lastfile in Dein $strKey2 zurückgeben, anstatt dem Array und gut is...

            Alle bereits angesprochenen Hinweise zur Codeverbesserung solltest Du aber bitte beherzigen!


            EDIT: Hier mal ne andere Variante Deiner Funktion:
            PHP-Code:
            $sFolder '../otd/downloads';

            function 
            getFile$sFolderName$bLatest true ) {

                
            $aFiles = array();
                
            $itFileSystemIterator = new FilesystemIterator$sFolderName );

                foreach ( 
            $itFileSystemIterator as $oFile ) {

                    if ( 
            $oFile->isFile() ) {

                        
            $aFiles$oFile->getMTime() ] = $oFile->getFileName();

                    }

                }


                !
            $bLatestksort$aFiles ): krsort$aFiles );
                return 
            end$aFiles );

            }


            $sFile getFile$sFolder ); // <= Dein $strKey2; jüngste Datei im Verzeichnis
            $sFile getFile$sFolderfalse ); // <= älteste Datei im Verzeichnis 
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar

            Lädt...
            X