chmod und FTP.au3

  • Hallo,

    habe mit der FTP.au3 dateien auf meinen FTP-Server legen können aber jetzt müsste ich bei einigen noch die Rechte ändern. Es gibt wohl eine Funktion _FTPCommand mit der man Befehle versenden kann, aber so richtig blicke ich da nicht durch.

    Kennt jemand eine Lösung ?

    Danke

  • sollte so in etwa gehen :)

    Spoiler anzeigen
    [autoit]

    _FTPCommand($connection,"chmod 755 filename",1,1)
    $ResponseHandle = @extended
    Local $returnText = ""
    Do
    $returnText &= _FTPReadFile($ResponseHandle,1024)
    Until @extended = 0
    $returnText = BinaryToString(Binary('0x'&StringReplace($returnText,'0x','')))
    MsgBox(0,"Returned Text",$returnText)

    [/autoit]


    Wenn dir Funktionen fehlen, nimm Erweiterte FTP-Funktionen

  • Es funktionieren eigentlich fast alle Linux Commands bei FTP, put, get, ls, mkdir .....
    Somit kannst du eigentlich alles umsetzen. Die Parameter zu den Optionen findest du im Internet.

    MfG
    Der_Doc

  • Danke Progandy,

    habe es gleich mal getestet aber irgendwie klappt es nicht. Ich habe die erweiterte ftp_ex.au3 genommen und deinen Code so übernommen und nur den Filename geändert - aber als Rückgabewert erhalte ich immer "0" d.h. die Funktion wurde nicht ausgeführt.

    Mein Code sieht so aus :

    Code
    $Hand = _FTPOpen("FTPCon") 
    $Ftpc = _FTPConnect($Hand, $server, $username, $pass) 
    $Ftpp = _FtpPutFile($Hand, $TempDir & "test.sh" , "/tmp/test.sh") 
    _FTPCommand($Hand,"chmod 755 /tmp/test.sh",1,1)

    Die Datei wird richtig übertragen somit steht die FTP Verbindung.

    Woran kann der Fehler liegen ? :wacko:

  • So,
    habe mich mal intensiv mit der Funktion auseinandergesetzt und habe es am Ende hinbekommen. :thumbup:

    Allerdings habe ich in der Funktion _FTPCommand der FTP_Ex.au3 2 Fehler festgestellt :

    Die original Zeile lautet :

    Code
    Local $ai_FTPCommand = DllCall($GLOBAL_FTP_WININETHANDLE, 'int', 'FtpCommand', 'long', $l_FTPSession, 'long', $l_ExpectResponse, 'long', $l_Flags, 'str', $s_FTPCommand, 'ulong', $l_Context, 'dword*', 0)

    und ich habe darin den Wert von 'ulong' in 'long' vor $l_Context und 'dword*' in 'dword' geändert.

    Code
    Local $ai_FTPCommand = DllCall($GLOBAL_FTP_WININETHANDLE, 'int', 'FtpCommand', 'long', $l_FTPSession, 'long', $l_ExpectResponse, 'long', $l_Flags, 'str', $s_FTPCommand, 'long', $l_Context, 'dword', 0)

    Außerdem habe ich den Rückgabewert von _FTPConnect() genommen und nicht den von _FTPOpen() wie in der Beschreibung drin steht beim Funktionsaufruf. Ach ja, und der FTP Befehl is "site chmod" .

    Das Ganze sieht dann folgendermaßen aus :

    Code
    $Hand = _FTPOpen("FTPCon") 
    $Ftpc = _FTPConnect($Hand, $server, $username, $pass) 
    $Ftpp = _FtpPutFile($Hand, $TempDir & "test.sh" , "/tmp/test.sh") 
    _FTPCommand($Ftpc,"site chmod 755 /tmp/test.sh")

    Ich hoffe das hilft anderen weiter :)


    Ach ja, wie kann man den Beitrag auf gelöst setzen ? ?(

    Einmal editiert, zuletzt von SanchoPanza (8. Oktober 2008 um 13:07)

  • Nein, das ist kein Fehler :) Das ist Absicht.
    ulong und long ist egal sollte eigtl sogar ulong_ptr sein :)
    dowrd* ist so, damit man den Rückgabewert bekommten kann, falls man den Parameter braucht eigtl ist das hwnd*

    und ja, das site wird wohl gefehlt haben, aber mit den commands kenn ich mich eben nicht so genau aus.

  • Ich bin ja auch froh, dass es funktioniert aber es ist tatsächlich so, dass wenn ich diese 2 Werte nicht ändere dann wird der Befehl nicht ausgeführt. Zumindest bei mir mit der v3.2.8.1.

    Werde mal die Tage die neueste installieren - vielleicht verhält es sich da anders !?!

  • Ja, das ist neu. * steht für Parameter by Reference, sodass du den Wert zurückbekommst, wenn er sich ändert. Und mit 3.2.10 wurden auch neue Typen eingeführt :)