• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

simpler ftp upload für druckerei?

mario_blank

New member
hallo leute, mich hat eine kleine druckerei gefragt ob ich für sie einen FTP-upload basteln kann. ich habe gesagt, weiß nicht ob ich das kann, ich werde mal schauen. nun. mit ftp upload meinen sie, einfach eine art webseite auf die der kunde zugreifen kann, und ganz simpel über einen DURCHSUCHEN button, dateien auf ihren eigenen server (eventuell in einen bestimmten ordner laden kann)...

also das kann wirklich äußerst simpel sein, einfach ein button mit "durchsuchen" und ein button zum "uploaden" (eventuell mit einer passwort abfrage die man dem kunden zuvor per mail mitteilen könnte -> aber das glaub ich bring ich schlussendlich selbst hin)

aber ich weiß nicht wie ich sowas angehen soll, bzw. wie sowas funktioniert. kennt da wer vielleicht eine art vorgefertigtes template, tutorials oder kann mir sonst ganz schnell eine mini-anleitung und ein wenig code zur verfügung stellen?

schönen sonntag noch
lg mario
 
Vielleicht hilft dir ja mein Script weiter:
Upload script

Is bis jetzt nur local eingestellt, aber übernenn webserver der mit ftp zusammenarbeitet bestimmt vorstellbar
 
danke euch allen! coyboc, dein script sieht super aus, aber ich habe bereits ein noch einfacheres gefunden das eigentlich auch funktionieren müsste: ich brauche bitte eure hilfe:

http://codestips.com/php-ftp-upload-tutorial/

bitte schaut euch das ganz kurz an, das ist perfekt für mich, nur würde ich anstatt der vielen eingabefelder nur das für das passwort lassen, alle anderen anageben, würde ich vorher eingeben.

PHP:
<div id="content">
		<?
		if(!isset($_POST["submit"])){?>

		<form action="upload.php" method="POST" enctype="multipart/form-data">
		<table align="center">
		<tr>
		<td align="right">
		Password:
		</td>
		<td>
		<input size="40" type="password" name="password" value="" >
		</td>
		</tr>
		<tr>
		<td align="right">
		Select your file to upload:
		</td>
		<td>
		<input name="userfile" type="file" size="40">
		</td>
		</tr>
		</table>
		<table align="center">
		<tr>
		<td align="center">
		<input type="submit" name="submit" value="Upload file" />
		</td>
		</tr>

		</table>
		</form>
		<?}
		else 
		{

			set_time_limit(300);//for setting 

		$paths=$_POST['/userupload'];

		$filep=$_FILES['userfile']['tmp_name'];

		$ftp_server=$_POST['hier steht meine ftp-server adresse'];

		$ftp_user_name=$_POST['hier steht mein ftp benutername'];

		$ftp_user_pass=$_POST['password'];

		$name=$_FILES['userfile']['name'];



		// set up a connection to ftp server
		$conn_id = ftp_connect($ftp_server);

		// login with username and password
		$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

		// check connection and login result
		if ((!$conn_id) || (!$login_result)) {
		       echo "FTP connection has encountered an error!";
		       echo "Attempted to connect to $ftp_server for user $ftp_user_name....";
		       exit;
		   } else {
		       echo "Connected to $ftp_server, for user $ftp_user_name".".....";
		   }

		// upload the file to the path specified
		$upload = ftp_put($conn_id, $paths.'/'.$name, $filep, FTP_BINARY);

		// check the upload status
		if (!$upload) {
		       echo "FTP upload has encountered an error!";
		   } else {
		       echo "Uploaded file with name $name to $ftp_server ";
		   }

		// close the FTP connection
		ftp_close($conn_id);	

		}
		?>


	</div>

wenn ich das jetzt auf meine server spiele und eine datei auswähle, das passwort eingebe, dann kommt immer 404- upload.php konnte nicht gefunden werden. ist auch klar, habe ich ja keines mit auf den server gegeben, wenn bereits der ganze upload code im selben dokument ist. was muss ich da ändern damit es funktioniert.

bitte helft mir, das wäre sehr nett,
danke und schönen abend noch
 
versuch malt im form tag mit
PHP:
action="<? $_SERVER['PHP_SELF']; ?>"
falls die datei nachträglich umbenannt wird kommen keine Probeleme im script, weil immer die PHP seite als ziel ist, weiß nur nicht wieso er deine datei (also dein geposteter script) nicht findet, wenn sie genauso benannt wurde wies im script steht.
 
vielen dank coyboc,

so komme ich schon mal ein wenig weiter, ...jetzt kommt wenigstens schon mal eine fehlermeldung die vom script generiert wird:

Code:
FTP connection has encountered an error!Attempted to connect to for user ....
das heißt in meinem fall also, dass irgendwas mit der verbindung und dem login nicht stimmt, oder?

könnte das script vielleicht mal von euch jemand kurz testen! es wäre so cool wenn ich das hinbekommen könnte.

PHP:
<?php


	<div id="content">
		<?
		if(!isset($_POST["submit"])){?>
		<h2 class="pagetitle"><?php the_title(); ?></h2>
		<form action="<? $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
		<table align="center">
		<tr>
		<td align="right">
		Password:
		</td>
		<td>
		<input id="ftpinput" type="password" name="password" value="" >
		</td>
		</tr>
		<tr>
		<td align="right">
		Select your file to upload:
		</td>
		<td>
		<input id="ftpinput" type="file" name="userfile">
		</td>
		</tr>
		</table>
		<p class="ftpbreak" />
		<div align="center"><input type="submit" name="submit" value="Upload file"/></div>
		</form>
		<?}
		else 
		{

			set_time_limit(300);//for setting 

		$paths=$_POST['/userupload'];

		$filep=$_FILES['userfile']['tmp_name'];

		$ftp_server=$_POST['ftp://ftp.meinserver.de'];

		$ftp_user_name=$_POST['meinbenutzername'];

		$ftp_user_pass=$_POST['password'];

		$name=$_FILES['userfile']['name'];



		// set up a connection to ftp server
		$conn_id = ftp_connect($ftp_server);

		// login with username and password
		$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

		// check connection and login result
		if ((!$conn_id) || (!$login_result)) {
		       echo "FTP connection has encountered an error!";
		       echo "Attempted to connect to $ftp_server for user $ftp_user_name....";
		       exit;
		   } else {
		       echo "Connected to $ftp_server, for user $ftp_user_name".".....";
		   }

		// upload the file to the path specified
		$upload = ftp_put($conn_id, $paths.'/'.$name, $filep, FTP_BINARY);

		// check the upload status
		if (!$upload) {
		       echo "FTP upload has encountered an error!";
		   } else {
		       echo "Uploaded file with name $name to $ftp_server ";
		   }

		// close the FTP connection
		ftp_close($conn_id);	

		}
		?>


	</div>

sieht da wer einen fehler?
 
tjo hab 4 zeilen geändert:
-div mit der id content aus den php tags geschoben
-erstmal die function the_titel(), für ein test aus dern h2 tags entfernt
-meine locale ip zum testen in die ziel ip eingegeben (127.0.0.1), da ich ein localen ftp derzeit laufen hab konnt ich fix testen
-den ftp-usernamen geändert für meine test (php)

und er hat wunderbar die daten verschickt, komisch....

PHP:
//hier den divtag aus den php tags rausgeschoben
<div id="content">
        <?
        if(!isset($_POST["submit"])){?>
        <h2 class="pagetitle">der titel</h2>
        <form action="<? $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data">
        <table align="center">
        <tr>
        <td align="right">
        Password:
        </td>
        <td>
        <input id="ftpinput" type="password" name="password" value="" >
        </td>
        </tr>
        <tr>
        <td align="right">
        Select your file to upload:
        </td>
        <td>
        <input id="ftpinput" type="file" name="userfile">
        </td>
        </tr>
        </table>
        <p class="ftpbreak" />
        <div align="center"><input type="submit" name="submit" value="Upload file"/></div>
        </form>
        <? }
        else 
        {

            set_time_limit(300);//for setting 

        $paths=$_POST['/userupload'];

        $filep=$_FILES['userfile']['tmp_name'];
//hier ip geändert
        $ftp_server='127.0.0.1';
//hier usernamen geändert
        $ftp_user_name='php';

        $ftp_user_pass=$_POST['password'];

        $name=$_FILES['userfile']['name'];



        // set up a connection to ftp server
        $conn_id = ftp_connect($ftp_server);

        // login with username and password
        $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

        // check connection and login result
        if ((!$conn_id) || (!$login_result)) {
               echo "FTP connection has encountered an error!";
               echo "Attempted to connect to $ftp_server for user $ftp_user_name....";
               exit;
           } else {
               echo "Connected to $ftp_server, for user $ftp_user_name".".....";
           }

        // upload the file to the path specified
        $upload = ftp_put($conn_id, $paths.'/'.$name, $filep, FTP_BINARY);

        // check the upload status
        if (!$upload) {
               echo "FTP upload has encountered an error!";
           } else {
               echo "Uploaded file with name $name to $ftp_server ";
           }

        // close the FTP connection
        ftp_close($conn_id);    

        }
        ?>


    </div>


er hat das paswort und alles sauber gemacht, es funktioniert, falls mein test nichts kritisches geändert hat...

schau mal nach ob du die ip richtig eingetragen hast, ip ohne port angeben port extra behandeln, also nich
PHP:
$ftp_server="127.0.0.1:21;"
sondern ehr so:
PHP:
$ftp_server="127.0.0.1";
$ftp_server_port="21";

[...]

$conn_id = ftp_connect($ftp_server, $ftp_server_port);
(der Port 21 ist Standart port, solange er nicht geändert wird.)
so mach ich es immer, wollts nur sagen falls da der Fehler liegen könnte...

Bei den test kann es auch daran liegen das es funktioniert hat weil es halt eine ip ist, hat aber allerdings nichts zur sagen gegenüber eine "ftp://....." domain-ip, so kenn ich viele freunde von mir die eine dyndns ip für ihren ftp besitzen, gleichzeitig aber auch eine normale octet ip...
 
Zuletzt bearbeitet:
Logindaten sind richtig und funktionieren auch? Mal mit nem ftp-Client ausprobiert ob du mit den Daten auf den Server kommst?
 
danke euch beiden für die echt nette hilfe.

ich bin schon wieder etwas weiter dank dem minimal abgewandelten code den du (coyboc) mir zu verfügung gestellt hast.

zur erklärung...vielleicht hängt das ganze ja irgendwie damit zusammen:
1.) ich arbeite auf einem localhost unter mac (mamp) und teste das ganze so.
2.) ich habe aber bei den serveradressen im script einen echten server eingegeben.
3.) ich teste das ganze mit zwei servern:
a.) meinem eigenen server da der nur mit "meineadresse.de" eingegeben werden muss, zumindest mal im ftp client den ich nebenher laufen habe.

b.) und mit dem server meines kunden, der wirklich eine "FTP" adresse hat, nämlich "ftp://ftp.kundendomain.de"

4.) ich habe beide server in meinem ftp client als favoriten angelegt und beide funktionieren einwandfrei, ich kann auf beide server daten ziehen/erstellen/löschen usw.

5.) ich habe auf beiden servern (meinem eigenen und dem von kunden) einen ordner im ROOT verzeichnis namens "userupload" angelegt.

6.) wenn ich jetzt in meinem script (das ich von meinem htdocs (localhost) folder aus teste) die zugangsdaten für meinen server eingebe, dann schaut das ganze so aus:

PHP:
$paths=$_POST['/userupload']; //muss ich da ein "/" davor machen, oder nicht? der ordner "userupload" existiert auf meinem server.

	        $filep=$_FILES['userfile']['tmp_name'];
	
	        $ftp_server='meineadresse.de'; //die adresse lautet wirklich nur meineadresse.de, also ohne ftp. oder ftp:// oder sonstigem
	
			$ftp_server_port="21";
			
	        $ftp_user_name='mein benutzername'; //hier habe ich den benutzernamen meines servers eingegeben

	        $ftp_user_pass=$_POST['password'];

	        $name=$_FILES['userfile']['name'];

wenn ich jetzt so teste, bin ich schon mal weiter als ursprünglich denn jetzt kommt folgende meldung:
HTML:
Icon
Connected to meinserver.de, for user meinbenutzername.....FTP upload has encountered an error
aber es gibt eben immer noch einen fehler, und es wird nicht upgeloaded.

zu erwähnen ist vielleicht auch noch, dass ich nur mit ein ca. 10kb großen gif den upload teste.




wenn ich das ganze für den kundenserver teste, dann gebe ich seine daten einen:

PHP:
$paths=$_POST['/userupload'];

	        $filep=$_FILES['userfile']['tmp_name'];
	
	        $ftp_server='ftp://ftp.kundenserver.de'; //achtung der server hat wirklich ein ftp://ftp. davorstehen
	
			$ftp_server_port="21";
			
	        $ftp_user_name='kundenpasswort';

	        $ftp_user_pass=$_POST['password'];

	        $name=$_FILES['userfile']['name'];

wenn ich das teste, dann ladet mein browser ein wenig und bringt dann folgende meldung:
HTML:
Icon
FTP connection has encountered an error!Attempted to connect to ftp://ftp.kundenserver.de for user kundenname....

wobei ich hier vielleicht auch erwähnen sollte, das mit dem normalen ftp-client (ich verwende TRANSMIT am mac) der server relativ langsam ist. aber er funktioniert, also ich kann sachen ganz normal draufziehen. aber da könnte ich mir vorstellen, dass es sich eher um eine art zeitüberschreitung oder so handelt.


was mach ich denn da bitte falsch? vielen dank für die nette hilfe bisher! ich hoffe ich bin nicht allzu lästig!
 
hm, mir fällt ehrlich nicht ein woran das liegen könnte außer... an der "$ftp_server" ip, wobei mir das rätsel vorschreibt (in sachen ips bin ich nicht soweit das ich 100% sagen kann das es mit der oder der ip geht, will dir nur kein müll anderen ;) )

Versuch mal die octet ip vom Kunden server, bzw deinem server rauszufischen, soweit ich weiß gibt es da solche ips hinter solchen domain ips (XXX.XXX.XXX.XXX ips halt...)

und versuch es erneut mit der ip dann, sonst keine ahnung, ich hatte noch nicht wirklich dieses problem
 
juhu, ich habe es geschafft.
ich habe mir mit "ping kundenadresse.de" die ip adresse geholt, und mit der klappt es. danke für die hilfe.

noch eine kleine frage:
1.)mir wird die datei nicht in den zielordner "/userupload" geladen sondern nur direkt ins root verzeichnis. was muss ich machen, damit mir die datei in das "/userupload" ordner geladen wird.

vielen dank für dein äußerst spitzenmäßige hilfe!
 
Alt:
PHP:
$paths=$_POST['/userupload'];
$filep=$_FILES['userfile']['tmp_name'];
Neu:
PHP:
$filep='/userupload/'.$_FILES['userfile']['tmp_name'];
 
muss ich da sonst auch noch was editieren? einfach die beiden ALT zeilen löschen und die NEUe einfügen? so klappt es nicht, dann bekomm ich wieder fehlermeldungen?
 
Alt:
PHP:
$paths=$_POST['/userupload'];
$filep=$_FILES['userfile']['tmp_name'];
Neu:
PHP:
$filep='/userupload/'.$_FILES['userfile']['tmp_name'];

das is doch die quell datei, wenn er es so eingibt findet ftp die zu kopierende datei nicht mehr.
(Falls ich mich in deiner Aussage nicht irre)

PHP:
ftp_put(Verbindungsdaten, zielpfad."/".zieldateiname, Quellordner."/".quelldatei, FTP_BINARY);

wenn standartmäßig "userupload" dein ziel verzeichnis sein soll dann mach es am besten so:

PHP:
        $filep=$_FILES['userfile']['tmp_name']; 
        $name=$_FILES['userfile']['name'];
[....]

// upload the file to the path specified
$upload = ftp_put($conn_id, "/userupload/".$name, $filep, FTP_BINARY);

oder

PHP:
        $dic = "/userupload/";
        $filep=$_FILES['userfile']['tmp_name']; 
        $name=$_FILES['userfile']['name'];
[....]

// upload the file to the path specified
$upload = ftp_put($conn_id, $dic.$name, $filep, FTP_BINARY);
 
Zuletzt bearbeitet:
Streich mein Beitrag von vorhin. Habe im falschen Script von dir geschaut ohne Nachzudenken.
Folgendes sollte dir helfen:
PHP:
$paths='/userupload';
 
:D und nun die wirklich allerletzte frage:

ich würde gerne noch eine VALIDIERUNG der zwei inputfelder durchführen.
jetzt habe ich einfach mal selbst probiert, aber ich scheitere leider:

ich habe dem PASSWORD feld eine id="password" gegeben, und dem FILE-INPUT feld eine id="fileselect"

ganz oben habe ich ergänzt:
PHP:
	        <form action="<? $_SERVER['PHP_SELF']; ?>" method="POST" enctype="multipart/form-data" onSumbit="dosubmit();">

also müsste doch beim submitten der form (oder beim klick auf "UPLOAD FILE") die funktion dosubmit(); ausgeführt werden, oder?

ganz unten im script habe ich folgendes javascript definiert:
PHP:
<script type="text/javascript">
var pw = document.getElementById("password");
var fs = document.getElementById("fileselect");

function dosubmit() {
	if (pw.value.length == 0) {
		alert("Please enter a Login-password for our FTP-Server.")
		return false;
	} 
	if (fs.value.length == 0) {
		alert("Please choose a file to upload on our FTP-Server.")
		return false;
	} 
	al.className = "loader";
}
</script>

aber es wird leider immer sofort submitted, ohne zu prüfen ob ich was in die felder schreibe oder nicht! ???
 
mach das über php, und wennde alert fenster ausgeben willst, ganz einfach
PHP:
if($beispiel == ""){echo '<script type="text/javascript">alert("Das Feld ist Leer, schreib was rein!");</script>';}

müsstest ja ungefähr wissen wie das geht^^

is nur ne Lösungsmöglichkeit, mit der du direkt an dein FTP script anknüpfen kannst, kannst natürlich auch über javascript testen lassen, ich mach es ehr nicht, java macht mir nur effekte, bei leeren feldern lass ich wenn immer möglich PHP sprechen.
 
Ins onsubmit muss noch ein return vor den Funktionsaufruf und als letzte Zeile in der JS-Funktion ein return true;
 
Zurück
Oben