FTP Upload Text-Datei auf eine Webseite (ONE.COM) Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
divanebaba
Posts: 805
Joined: 20 Dec 2016, 03:53
Location: Diaspora

FTP Upload Text-Datei auf eine Webseite (ONE.COM)

15 Mar 2017, 14:26

Hallo Leute.
Ich möchte eine Textdatei namens track.txt nach One.com hochladen.
Das FTP-Beispiel unter FILEAPPEND macht mich noch wahnsinnig.

One.com gibt folgende Informationen:
Um sich via FTP anzumelden, verwenden Sie bitte diese Informationen:
Host: ftp.NameMeinerWebsite.net
Benutzername (User): NameMeinerWebsite.net
Port: 21

Die URL aus Filezilla zeigt für die Startseite folgendes:
[url]sftp://[email protected]/customers/4/b/d/NameMeinerWebsite.net/httpd.www/index.html[/url]

Meine Code sieht so aus:

Code: Select all

VarMitNamenDerZieldatei=D:\Meine\NameMeinerWebsite\tracking\track.txt
FTPBefehlDatei = %A_ScriptDir%\FTPBefehle.txt
FTPLogDatei = %A_ScriptDir%\FTPLog.txt
FileDelete %FTPBefehlDatei%  ; Falls das vorherige Ausführen vorzeitig beendet wurde.

FileAppend,  ; Das Komma ist in diesem Fall erforderlich.
(
open ftp.NameMeinerWebsite.net
NameMeinerWebsite.net
******* (Passwort)
binary
cd htdocs
put %VarMitNamenDerZieldatei%
bye
), %FTPBefehlDatei%

RunWait %comspec% /c ftp.exe -s:"%FTPBefehlDatei%" >"%FTPLogDatei%"
FileDelete %FTPBefehlDatei%  ; Löscht sie aus Sicherheitsgründen.
Run %FTPLogDatei%  ; Zeigt das Protokoll zum Untersuchen an.
Ich kriege die Textdatei track.txt weder ins Wurzelverzeichnis (http://www.NameMeinerWebsite.net) noch in das eigentliche Wunschverzeichnis (http://www.NameMeinerWebsite.net/tracking) kopiert.

Ich hoffe sehr, daß einer von euch nicht nur weiß, was ich falsch mache, sondern es mir auch vernünftig erklärt. Links zu MSDN und anderen weit ausschweifenden Hilfeseiten kenne ich bereits.
Last edited by divanebaba on 17 Mar 2017, 12:58, edited 1 time in total.
Einfach nur ein toller Typ. :mrgreen:
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: FTP Upload Text-Datei auf eine Webseite (ONE.COM)

15 Mar 2017, 16:29

Schon ewig nicht mehr gemacht. Das Commandset von ftp.exe sieht in der mir vorliegenden Quelle keine Anführungszeichen bei Befehls- und Logdatei vor. Machen deine Pfade diese denn notwendig?

Filezilla zeigt sftp und nicht ftp!?!
https://winscp.net/eng/docs/scripting#console
User avatar
divanebaba
Posts: 805
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: FTP Upload Text-Datei auf eine Webseite (ONE.COM)  Topic is solved

17 Mar 2017, 11:16

Hallo Leute.

Ich habe die Lösung. Es hat etwas mit der Zeichencodierung zu tun.
Die Datei namens FTPBefehlDatei muss im Format CP1252 abgespeichert werden, damit das windowseigene ftp.exe diese korrekt verarbeiten kann.
Codierungen wie ANSI und UTF-8 schlugen fehl
Ich habe nachgeschaut und das CP1252 ist die westeuropäische lateinische Codierung.

Der Code lautet jetzt, abgekürzt:

Code: Select all

FileAppend,
(
open ftp.NameMeinerWebsite.net
NameMeinerWebsite.net
********** <---  hier steht das Passwort
binary
cd tracking
delete track.txt
put %VarMitNamenDerZieldatei%
bye
), %FTPBefehlDatei%, CP1252
Der von mir, über FileZilla, abgegriffene Pfad, war ebenfalls verkehrt.
Wie man im Code sehen kann, ist das Wurzelverzeichnis auf dem Server NameMeinerWebsite.net und der untergeordnete Ordner heißt bei mir tracking.
Ich springe also in das Verzeichnis www.NameMeinerWebsite.net/tracking


Das Kniffelige war hier einzig die Codierung.

Danke für Deinen Link, BoBo. Sind echt nützliche Infos enthalten.
Einfach nur ein toller Typ. :mrgreen:
User avatar
divanebaba
Posts: 805
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: FTP Upload Text-Datei auf eine Webseite (ONE.COM)

10 Apr 2017, 17:03

Hallo jNizM.
Also ich habe FTP_Upload.ahk getestet und erfolgreich eine Datei ins Wurzelverzeichnis hochgeladen.
Dasselbe in ein Unterverzeichnis jedoch, ist mir nicht gelungen.
Ich habe für Pfade sowohl \ als auch / ausprobiert.
Siehe:

Code: Select all

FTPUpload("ssh.MeineWebseite.net/tracking", "Benutzername", "Passwort", "D:\A\B\C\D.txt", "ABC.txt")
FTPUpload("ssh.MeineWebseite.net\tracking", "Benutzername", "Passwort", "D:\A\B\C\D.txt", "ABC.txt")
Geht das nicht, oder mache ich wieder etwas verkehrt?
Schade eigentlich, weil die Eingabedaten hier so simpel sind. Simpel als Verbesserung im positiven Sinn.

PS: Mein Projekt - Eine Trackingseite - funktioniert jetzt fabelhaft.
Dank all der vielen Codeschnipsel, die ich im Internet zusammengesucht und verkittet habe :mrgreen: :mrgreen:

Folgendes habe ich realisiert:

Ich lade mit AHK eine Textdatei, mit csv-ähnlichem Aufbau, auf ein Webspace.
Dieser Webspace beinhaltet eine PHP-Website mit einem sichtbaren Eingabeformular.
Die PHP-Website verarbeitet eine sechsstellige Trackingnummer, die in der hochgeladenen Datei gesucht wird.
Sollte sie gefunden werden, wird die gesamte Zeile geparst und die Informationen werden tabellarisch im Browser angezeigt.

Speziell: Fahrzeugüberführungen.
Der Kunde gibt seinen Wagen ab, benennt die Destination, geht nach Hause und trackt den Status.
Musste er vorher immer wieder anrufen und spezielle Informationen nachfragen, so kann er nun, per Smartphone und weltweit, die letzten sechs Ziffern seiner Chassisnummer eingeben und alles über sein Fahrzeug erfahren.
Z.B. Ankunftsdatum am Hafen, Schiffnamen, voraussichtliches Abfahrts-/Ankunftsdatum etc.

Also Arbeitsentlastung im Büro und mehr Kundenzufriedenheit :mrgreen: :mrgreen: :mrgreen:

Wer an ähnlichen Lösungen arbeitet kann mir vielleicht helfen, die Seite sowohl für Smartphones, als auch für normale Monitore, ansprechend zu gestalten. Dafür kriegt er auch das php-Skript zu sehen, hihi :mrgreen:

Nur damit ihr sehen könnt, wie es aussieht, wage ich mich an die Grenzen der Schleichwerbung. Ehrlich :D :D :D
Klickt auf unteren Link und dann auf den orangefarbenen Balken, in dem "Tracking" steht.

http://africar.de

und dann 609708 eingeben.

Einen Direktlink ohne Schleichwerbung habe ich leider nicht hinbekommen.

Voila. DIY-Trackingsite

*$%&/ auf die Regeln. Hier ist das PHP-Skript. Zumindest das Gerüst.
Die csv-ähnliche Datei ist folgendermaßen aufgebaut:
Das erste Trennzeichen ist ein Gleichheitszeichen. Die folgenden Trennzeichen jeweils ein Pipe.
123456=JMZGG14F231123456|Mazda|323

Optimal ist das nicht, da das Suchwort, hier 123456, auch nochmal in der kompletten Chassisnummer vorkommt.

Die Liste ist ganz einfach mit weiteren, mit Pipezeichen getrennten, Einträgen erweiterbar. Nur ganz simple PHP-Codeanpassung notwendig, die auch PHP-Unkundige, so wie ich, durchführen können.

Code: Select all

<?php
error_reporting(E_ALL);
/* formular-checks immer bevor das formular ausgegeben wird */
$gefunden = false;
$formularfehler = '';
if(isset($_POST['submitbutton'])){
	// formular abgesandt
	if(!isset($_POST['statuscode'])or empty($_POST['statuscode'])){
		// es wurde kein code eingegeben
		$formularfehler = 'Type Chassis#!';
	}else{
		// es wurde ein code eingegeben
		$suchwort = trim($_POST['statuscode']); // trim entfernt u.a. leerzeichen am anfang und ende
		$suchwort = strtoupper($suchwort);
		// file name festlegen
		$filename = 'track.txt';
		// existiert die datei?
		if(!file_exists($filename)){
			/* nein, datei nicht gefunden
				HIER DEINE FEHLERBEHANDLUNG
			*/
		}else{
			$daten = file($filename); // liest eine datei in ein array (http://de2.php.net/manual/en/function.file.php)
			/* jetzt ist der inhalt von 'track.txt' in $daten */
			foreach($daten as $str){ // für jede zeile in $daten als (genannt) $str
				// temp-ziel-variable (erstmal ein leeres array):
				$result = array();
				// wir trennen mittels "="
				$temp = explode("=", $str);
				if(count($temp) < 2){
					// hier dann was du brauchst -- fehler meldung? oder ignorieren?
					//   HIER DEINE FEHLERBEHANDLUNG
					// continue bewirkt, dass mit der nächsten zeile weitergemacht wird.
					continue;
				}
				/* $temp[0] stecken wir nun in unsere temp-ziel-variable */
				$result[0] = $temp[0]; // "YECXXcc"
				$str = $temp[1];
				/* jetzt teilen wir via "|" */
				$temp = explode("|", $temp[1]);
				//	$result[0] ist schon (siehe weiter oben) zugewiesen und enthält "YECXX"
				//	daher machen wir hier mit $result[1] weiter
				$result[1] = $temp[0];
				$result[2] = $temp[1];
				$result[3] = $temp[2];
				// Wenn der 1. Eintrag ( 0 ) mit dem Suchwort übereinstimmt
				if($result[0] == $suchwort){
					// sagen das gefunden wurde
					$gefunden = true;
					// break beendet hier die foreach() -schleife
					break;
				}
			} // [ENDE] foreach
		} // [ENDE] else ($daten war nicht false)
	} // [ENDE] else (wenn $_POST['statuscode'] nicht leer war)
} // [ENDE] isset($_POST['submitbutton'])
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
	<meta charset="utf-8" />
	<title>Trackingsite</title>
	<style>
		table { width:100%; }
		.Titel { text-align: left; font-size:3em; color:#000000; background-color:#EFBC0B; }
		.Inhalt { text-align: left; font-size:3em; color:#000000; background-color:#ffffff; vertical-align:top; }
		Rest { text-align: left; font-size:3em; color:#000000; background-color:#ffffff; vertical-align:top; }
	</style>
</head>
<body>
	<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" enctype="application/x-www-form-urlencoded">
		<p>
			<Rest>Chassis# (last six numbers):</Rest><br>
			<input class="Inhalt" type="text" name="statuscode" />
			
			<input class="Inhalt" type="submit" name="submitbutton" value="Ok">
			<?php echo htmlspecialchars($formularfehler); ?>
		</p>
	</form>
<?php
	//Wenn etwas gefunden wurde
	if($gefunden){
		// zur erinnerung: die gefundene zeile steckt in $result
?>

<caption>
	<Rest>Results for "<?php echo htmlspecialchars($suchwort); ?>"</Rest>
</caption>
<table>
	<thead>
		<tr>
		<th class="Titel"><b>Chassis#:</b></th>
		</tr>
		<tr>
		<td class="Inhalt"><b><?php echo htmlspecialchars($result[1]); ?></b></td>
		</tr>

		<tr>
		<th class="Titel"><b>Brand</b></th>
		</tr>
		<tr>
		<td class="Inhalt"><?php echo htmlspecialchars($result[2]); ?></td>
		</tr>

		<tr>
		<th class="Titel"><b>Model</b></th>
		</tr>
		<tr>
		<td class="Inhalt"><?php echo htmlspecialchars($result[3]); ?></td>
		</tr>

		<tr>
		<th class="Titel"><b>Your shipping agency AFRICAR thanks for your order </b></th>
		</tr>				

	</thead>
	
</table>
<?php
	}
	//wenn nichts gefunden wurde oder die Datei nicht geöffnet werden konnte
	elseif(isset($_POST['submitbutton']) and $formularfehler == ''){
		// die meldung nur anzeigen, wenn die form angesandt wurde und keine $formularfehler vorkamen
		echo "No results. Please try capital letters.";
	}
?>
</body>
</html>
AHK hat, im Vergleich zu PHP und vielen anderen Sprachen, eine unschlagbar elegante Notation. Einfach super :)

EDIT: Das überarbeitete (verbesserte) PHP-Skript gibt es hier -> Online Trackingwebsite - Onlinetracking.
For the rectified PHP-Script please look here - > Online Trackingwebsite - Onlinetracking.
EDIT2: Bewegte Icons entfernt. :crazy:
Last edited by divanebaba on 15 Feb 2018, 14:43, edited 3 times in total.
Einfach nur ein toller Typ. :mrgreen:
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: FTP Upload Text-Datei auf eine Webseite (ONE.COM)

11 Apr 2017, 01:17

Unterverzeichnis:
Dann empfehle ich dir die Class_FTP.ahk (GitHub)
Unten in dem Beispiel gibt es die FtpSetCurrentDirectory mit der du das Verzeichnis wechseln kannst.
[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 21 guests