Upload souboru na FTP přes PHP formulář – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Upload souboru na FTP přes PHP formulář – PHP – Fórum – Programujte.comUpload souboru na FTP přes PHP formulář – PHP – Fórum – Programujte.com

 

svetlusak
~ Anonymní uživatel
2 příspěvky
3. 12. 2015   #1
-
0
-

dobry den vsem! moc bych vas chtela poprosit o pomoc. muj provozovatel hostingu nedavno zmenil verzi a prostredi PHP a od te doby mam problemy na webu. konkretne s nahravanim souboru na FTP server pres formular a PHP. komunikace s databazi mi funguje, ale neprenese se mi soubor. prosim, najde se nekdo, kdo by mi mohl poradit? byla bych vam moc vdecna...

formular: 

<?  include('./config.php');    ?>
<?
    $spojeni = @MySQL_Connect($se, $uz, $he);
    $db = @MySQL_Select_DB($DB);

?>


<FORM METHOD="POST" action="ins_info.php" enctype="multipart/form-data">
<TABLE>

<TR><TD><u><b>Upload a file:</b></u></TD></TR>
<TR>
<TD><b>Title:</b></TD>
<TD><INPUT TYPE="TEXT" NAME="titulek_form"></INPUT></TD>
</TR>
<TR>
<TD><b>Date:</b></TD>
<TD><INPUT TYPE="TEXT" NAME="datum_form"></INPUT></TD>
</TR>
<TR>
<TD><b>File:</b></TD>
<TD><INPUT TYPE="FILE" ACCEPT="*/*" SIZE="33" NAME="soubor"></INPUT></TD>
</TR>
<TR>
<TD><INPUT TYPE="SUBMIT" NAME="Odeslat" VALUE="Add to database"></INPUT></TD>
</TR>
</TABLE>

</FORM>

a soubor ins_info.php (soubor vlozeny pres formular dostane nove jmeno, napr. info1234.pdf -- ale ted mi funguje pouze komunikace s databazi -- takze vysledek je, ze na vystupu dostanu pouze info1234. (bez souboru na FTP serveru a bez koncovky s typem souboru). asi mam chybu nekde v te druhe casti kodu, od podminky while, ale nevim si s tim rady. slozky, do kterych se ma zapisovat, maji obe dve prava 777): 

<?	include('./config.php')	?>
<?
    @Set_Time_Limit(0);
    $INI_ADMIN_PASSWORD = $_POST["INI_ADMIN_PASSWORD"];
    $INI_ftp_server = $_POST["INI_ftp_server"];  
    $INI_info_path = $_POST["INI_info_path"];                                  
    $INI_info_ftp_path = $_POST["INI_info_ftp_path"]["filetype"]; 
    $INI_server_info_path = $_POST["INI_server_info_path"];
    $INI_server_tmp_path = $_POST["INI_server_tmp_path"];
    $INI_ftp_user = $_POST["INI_ftp_user"];
    $INI_ftp_pass = $_POST["INI_ftp_pass"];                               
    $spojeni_ftp = $_POST["spojeni_ftp"];
    $soubor = $_FILES["soubor"]["name"];

    $titulek_form = $_POST["titulek_form"];
    $datum_form = $_POST["datum_form"]; 
    $DatumInt = $_POST["DatumInt"];
    $MaxID = $_POST["MaxID"];     
    $prenos_info = $_GET[prenos_info];
    $vloz_info = $_GET[vloz_info];   
    $jmeno = $_POST["jmeno"];
    $vyber2 = $_POST["vyber2"];
    $datum2 = $_POST["datum2"];
    $nazev = $_POST["nazev"]; 
    $soubor_name = $_POST["soubor_name"];
    $cislo = $_POST["cislo"];
    $jmeno =  $_POST["jmeno"];    

IF($PASSWORD==$INI_ADMIN_PASSWORD):

	$spojeni = @MySQL_Connect($se, $uz, $he);
	$db = @MySQL_Select_DB($DB);

	$vyber2 = @MySQL_Query("SELECT Max(ID) FROM info");
	$MaxID = @MySQL_Result($vyber2, 0) +1;

	$titulek_form = HTMLSpecialChars($titulek_form);
	$datum_form = HTMLSpecialChars($datum_form);

	$datum2 = Explode(".", $datum_form);

	$DatumInt = MkTime(0,0,0, $datum2[1], $datum2[0], $datum2[2]);

	$jmeno = "info";
	
	$i = 1;

	do
{
		 if($i==1) $jmeno_old = $jmeno;
		 $jmeno = $jmeno_old;
		 $nazev = Explode(".", $soubor_name);
		 SRand((double)MicroTime()*1e6);
		 $cislo = Rand (1, 9999);
//		 $nazev[0] .= $cislo;
		 $jmeno .= $cislo.".".$nazev[1];
		 $i++;
}
	While(@File_Exists($soubor));


	$vloz_info = @MySQL_Query("INSERT INTO info VALUES ('$MaxID', '$titulek_form', '$datum_form', '$jmeno', '$DatumInt')");


// ***	FTP prenos souboru

        @ftp_chdir($INI_server_tmp_path);                 						        	// docasny adresar
        $spojeni_ftp = ftp_connect($INI_ftp_server); 	 					                // pripojeni k FTP serveru
        @ftp_login($spojeni_ftp, $INI_ftp_user, $INI_ftp_pass);                 // prihlaseni k FTP serveru

        $prenos_info = @ftp_put($spojeni_ftp, $INI_info_ftp_path.'/'.$jmeno, $_FILES["soubor"]["name"], FTP_BINARY);   	// kam se ma soubor ulozit

        @ftp_chdir($INI_server_home_path);                                 				// nastaveni domovskeho adresare
        @ftp_close($spojeni_ftp);                                                     			// odhlaseni od FTP serveru


// *** Konec - FTP prenos souboru

	Header("Location: status.php?prenos_info=$prenos_info&vloz_info=$vloz_info");
?>
<?
ELSE:
	Echo "<p style=\"color: #FF0000;\"><b>Nemáte přístup k aplikaci!</b></p>";
ENDIF;
?>
Nahlásit jako SPAM
IP: 193.84.205.–
peter
~ Anonymní uživatel
4007 příspěvků
3. 12. 2015   #2
-
0
-

$nazev = Explode(".", $soubor_name);
$jmeno .= $cislo.".".$nazev[1];

Na to bych rozhodne nespolehal. Pokud, tak byt hledal pozici posledni tecky strrpos, substring.
"soubor.1234.pdf" - exploduje se do ['soubor', '1234', 'pdf'], pole[1] = '1234' - neni to pdf?
"soubor..pdf" - exploduje se do ['soubor', '', 'pdf'], pole[1] = '' - take to neni pdf?

A zkus si udelat vypis $soubor_name (var_dump, echo, print_r) a pripadne ostatnich promennych, ktere v te funkci pouzivas.
A over si, zda ti funguje pft na nejakem svem pokusnem souboru, kde vis presne cesty a nemusis to skladat pres promenne.
 

Nahlásit jako SPAM
IP: 2001:718:2601:26c:d0c:491...–
peter
~ Anonymní uživatel
4007 příspěvků
3. 12. 2015   #3
-
0
-
Nahlásit jako SPAM
IP: 2001:718:2601:26c:d0c:491...–
svetlusak
~ Anonymní uživatel
2 příspěvky
3. 12. 2015   #4
-
0
-

#3 peter
moc Ti dekuji za odpoved... muj problem je ten, ze vsechno fungovalo bez problemu (bylo to naprosto jednoduche vkladani souboru, bez zjistovani pripon atd.). ale na hostingu zmenili cele prostredi, ani mi o tom nerekli a najednou prestalo vse fungovat... teprve kdyz jsem se ptala, tak mi rekli, ze kdyz pouzivam "nebezpecne prenosy", tak mi to nemusi fungovat, takze musim spravne deklarovat podminky a promenne -- takze prepsat pomoci GET a POST. uz se mi podarilo vse nejakym zpusobem rozchodit, ale nefunguje mi ta cast, kdy by se ten soubor mel prenest na ftp (vyberu soubor, ktery chci nahrat, dam "odeslat" a vysledek je ten, ze v databazi se mi objevi spravne nove jmeno souboru, napr. info1234, ale na ftp se mi neprenese soubor, takze i v databazi to je bez koncovky). to je jediny problem, ktery mam... proste mi ho vubec nevezme... a uz jsem z toho zoufala...

Nahlásit jako SPAM
IP: 2a00:1028:919f:d06:cd2a:5...–
peter
~ Anonymní uživatel
4007 příspěvků
4. 12. 2015   #5
-
0
-

Chyby se vypisuji pomoci prikazu error_reporting, nejlepe na zacatku souboru. Pak bych si na obrazovku vypsal vsechny promenne.

@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on"); 
error_reporting(E_ALL);

Z toho postu se to dalo vytahnout pomoci cyklu. Ale je to tedy bezpecnostni riziko, protoze pak si tam nekdo muze pripsat dalsi promenou. Takze je lepsi pouzit spis pole

foreach ($_POST as $key=>$value) {$$key = $value;}

$pole = array('a','b','c');
foreach ($pole as $value) {$$value = $_POST[$key];}
echo '<br>a = '.$a;
echo '<br>b = '.$b;
echo '<br>c = '.$c;

No, tak ja zkusim vlastni demo, s tebou neni rozumna rec :)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:9d3c:d4...–
peter
~ Anonymní uživatel
4007 příspěvků
4. 12. 2015   #6
-
0
-

   

<?php
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on"); 
error_reporting(E_ALL);

// ***	FTP prenos souboru

$ftp_server = "uzivatel.server.cz";
$ftp_port = 21;
$ftp_user = "uzivatelftp";
$ftp_psw  = "heslo";
$ftp_path = "/web/";
$path_load = "";
$file_load = $path_load.'favicon.ico';	//RW-R-R
// soubor ftp://uzivatel.server.cz/web/favicon.ico
$path_save = "";
$file_save = $path_save.'test-ftp';
// soubor ftp://uzivatel.server.cz/web/test-ftp

$conn = ftp_connect($ftp_server,$ftp_port);
if ($conn)
	{
	$login = ftp_login($conn, $ftp_user, $ftp_psw);
	// ftp_ssl_connect() ?
	if ($login)
		{
		ftp_chdir($conn, $ftp_path);
		$upload = ftp_put($conn, $file_save, $file_load, FTP_BINARY); 
		if ($upload) {echo 'preneseno';} else {echo 'chyba ftp upload';}
		}
	else	{
		echo 'chyba ftp login';
		}
	ftp_close($conn);
	}
else	{
	echo 'chyba ftp pripojeni';
	}

// Ty zavinace musi pryc, jestli chces videt errory. Po rozchozeni si je tam pridej, aby hacker nevidel errory.
// Nejdriv musis kontaktovat server, az pak se muzes preci se prihlasit a po prihlaseni zmenit cesty, ne?
// Neni mi jasne, proc ty udaje posilas pres post? Bezp. riziko.
?>

V tuto chvili mi to na mem serveru udela totez co copy($file_load, $file_save). Co to udela tobe?

Nahlásit jako SPAM
IP: 2001:718:2601:26c:9d3c:d4...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý