Error handling
Every ScriptFTP command returns a text string to the script once the command has finished. This text string is not the message that is usually shown on the ScriptFTP window below each command, it is a short text value that the script can internally handle to check if the execution of the command was successful or not. If everything goes well it will return the text “OK”, if something goes wrong you will get an error code. Evaluating this return value and taking the appropiate measures you can make your file transfers fault-tolerant.
In the following example the output of OPENHOST is stored in a variable called $result. If $result is “OK” we will continue, if $result is different from “OK” we will show a message and try to reconnect to the FTP server.
# This is a label. It marks a point in the script. # We will use it to return to this point if a # connection attempt fails. :connect # Shows a message PRINT("_____Connecting_____") # Connect to server. The return value of OPENHOST # is stored in $result $result=OPENHOST("myserver.com","me","13579") # Check if $result is different from "OK" IF($result!="OK") PRINT("Cannot connect! Trying again.") # Jump to the label :connect to retry # the connection GOTO :connect END IF # Once this point is reached ScriptFTP # will be connected to the server. # Transfer the files. GETFILE("*.*") # Close connection CLOSEHOST
The example above will try to connect to the FTP server indefinitely. Let us add some code in order to make only three attempts:
# This variable will store the connection attempts done. # It is initially is set to 0. $attempts=0 # This is a label. It marks a point in the script. # We will use it to return to this point if a # connection attempt fails. :connect # Add 1 to the connection attempts counter $attempts=$attempts+1 # Display a message PRINT("Connecting. Attempt number ".$attempts) # Connect to server. The return value of OPENHOST # is stored in $result $result=OPENHOST("myserver.com","me","13579") # Check if $result is different from "OK" IF($result!="OK") # If this is the third attempt stop execution IF($attempts==3) STOP ELSE PRINT("Cannot connect! Trying again.") # Jump to the label :connect to retry # the connection GOTO :connect END IF # Once this point is reached ScriptFTP # is connected to the server. # Transfer the files. GETFILE("*.*") # Close connection CLOSEHOST
The command PUTFILE also outputs a return value. We will evaluate it in order to check whether the upload has been performed successfully:
$webserver="www.whatever.com" $myuser="me" $mypassword="13579" OPENHOST($webserver,$myuser,$mypassword) $my_result_put=PUTFILE("*.*") # If PUTFILE returns anything different # from OK jump to :failed_put IF($my_result_put!="OK") GOTO :failed_put END IF :allright PRINT("All right") # Close connection CLOSEHOST() # Wait 60 seconds SLEEP(60) # Close ScriptFTP EXIT :failed_put PRINT("Error found putting files") # Close connection CLOSEHOST() # Wait 60 seconds SLEEP(60)
You can find more examples of error handling in the examples section of the website. The advanced scripts therein cover this issue in detail.