Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z ftp_put (nie tworzy pliku na serwerze)
Forum PHP.pl > Forum > Przedszkole
dj.bobas
Witajcie, 

na wstępie pragnę zaznaczyć, iż spędziłem sporo czasu używając funkcji 'szukaj', aby znaleźć rozwiązanie mojego problemu.... i nic... 




Problem dotyczy uploadu pliku na serwer. Jest standardowy formularz, za pomocą którego wczytuję plik i chcę go później umieścić w konkretnym katalogu na serwerze. Wiem, że można to zrobić za pomocą move_uploaded_file, sprawdzałem, funkcja nie wyrzuca błędu, ale też nie pokazuje niby utworzonego pliku. 

  1. $wysyl = move_uploaded_file("/home/people/xxxxxxxx/".$plik_tmp,$destination_file2);
  2. if(wysyl)
  3. {
  4. $_SESSION['ftp_upload']="Plik został wysłany na serwer.<br />";
  5. $_SESSION['color2']='green';
  6. $_SESSION['errorMessagePromyk']='Plik: '.$plik_nazwa.' o rozmiarze '.$plik_rozmiar.' bajtów został‚ przesłany na serwer!';
  7. }
  8. else
  9. {
  10. $_SESSION['ftp_upload']="Nie można skopiować pliku na serwer FTP!<br />";
  11. $_SESSION['color2']='red';
  12.   }





Więc spróbowałem przesyłać za pomocą ftp_put, ale problem jest tego typu, że działa łączenie z serwerem, ale nie działa sama funkcja ftp_put (plik napewno jest przesłany, bo sprawdzony metodą is_uploaded_file). Nie wiem, co może być źle... poniżej fragment kodu odpowiedzialnego za tą operację. Liczę na jakiekolwiek sugestie.... 

  1. $destination_file = $plik_nazwa;
  2. $destination_file2 = "/public_html/pliki/$plik_nazwa";
  3. $source_file = realpath($plik_tmp);
  4. echo $destination_file.", ".$destination_file2.", ".$source_file."<br>";
  5. /*
  6. $conn_ftp = ftp_connect(FTP_HOST);
  7. $login_result = ftp_login($conn_ftp, FTP_USER, FTP_PASSWORD);
  8. if ((!$conn_ftp) || (!$login_result))
  9. {
  10. $_SESSION['polacz_serw']="FTP connection has failed!";
  11. $_SESSION['color']='red';
  12. //echo "Attempted to connect to $ftp_server for user $ftp_user_name";
  13. }
  14. else
  15. {
  16. $_SESSION['polacz_serw']="Połączono z serwerem FTP.<br />";
  17. $_SESSION['color']='green';
  18. // ftp_pasv($conn_ftp,true);
  19. $upload = ftp_put($conn_ftp, $destination_file2, $plik_tmp, FTP_BINARY);
  20. if (!$upload)
  21. {
  22. $_SESSION['ftp_upload']="Nie można skopiować pliku na serwer FTP!<br />";
  23. $_SESSION['color2']='red';
  24. }
  25. else
  26. {
  27. $_SESSION['ftp_upload']="Plik został wysłany na serwer.<br />";
  28. $_SESSION['color2']='green';
  29. $_SESSION['errorMessagePromyk']='Plik: '.$plik_nazwa.' o rozmiarze '.$plik_rozmiar.' bajtów został‚ przesłany na serwer!';
  30. }
  31. ftp_close($conn_ftp);
  32. }
  33.  


Co do formatu przesyłu, to próbowałem i z FTP_ASCII i z FTP_BINARY....




Z góry dziękuję za pomoc...

maxil
  1. $plik_tmp = $_FILES['plik']['tmp_name'];
  2. $plik_nazwa = $_FILES['plik']['name'];
  3. $plik_rozmiar = $_FILES['plik']['size'];
  4. $katalog = "tutaj/sciezka/gdzie/ma/byc/wgrany/plik";
  5.  
  6. if(is_uploaded_file($plik_tmp)) {
  7. move_uploaded_file($plik_tmp, "$katalog/$plik_nazwa");
  8. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  9. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  10. }
  11. }
  12. else
  13. {
  14. echo "Plik <b>$plik_nazwa</b> nie został wgrany na serwer!";
  15. }


i stosowny do tego formularz

  1. <form action="plik.php" method="post">
  2. <input name="plik" type="file" /><br />
  3. <input type="submit" name="send" value="Wyślij" />
  4. </form>


i całość poskładana może wyglądać tak:

  1. if (isset($_POST['send']))
  2. {
  3. $plik_tmp = $_FILES['plik']['tmp_name'];
  4. $plik_nazwa = $_FILES['plik']['name'];
  5. $plik_rozmiar = $_FILES['plik']['size'];
  6. $katalog = "tutaj/sciezka/gdzie/ma/byc/wgrany/plik";
  7.  
  8. if(is_uploaded_file($plik_tmp)) {
  9. move_uploaded_file($plik_tmp, "$katalog/$plik_nazwa");
  10. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  11. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  12. }
  13. }
  14. else
  15. {
  16. echo "Plik <b>$plik_nazwa</b> nie został wgrany na serwer!";
  17. }
  18. }
  19. else
  20. {
  21. echo '<form action="plik.php" method="post">
  22. <input name="plik" type="file" /><br />
  23. <input type="submit" name="send" value="Wyślij" />
  24. </form>';
  25. }
dj.bobas
Niestety tym sposobem nie działa, tak jak pisałem funkcja move_uploaded_file w formie takiej, jak ja pisałem oraz jak pisał maxil nie zadziałała....   sadsmiley02.gif
Blame
Wyświetlają się jakieś błędy? Pokaż kod, który napisałeś.
maxil
to powinno zadziałać.
dopisz to jeszcze:

  1. <form action="plik.php" method="post" enctype="multipart/form-data">


zapomniałem o tym na śmierć teraz powinno działać
dj.bobas
Kod pliku do wrzucania gazetki na serwer:

  1.  
  2. <?php
  3. include('../hasla/db_data.php');
  4.  
  5. $action=$_GET['act'];
  6. if($action=='insert')
  7. {
  8. $plik_tmp = $_FILES['promyk']['tmp_name']; // plik tymczasowy
  9. $plik_nazwa = $_FILES['promyk']['name']; // nazwa promyka
  10. $plik_nazwa2='/home/people/lodz-mb-fatimskiej/public_html/pliki/'.$plik_nazwa; // nazwa na serwerze
  11. $plik_rozmiar = $_FILES['promyk']['size'];
  12. if(is_uploaded_file($plik_tmp))
  13. { if($plik_rozmiar>800000)
  14. { $_SESSION['komunikat_uploadu_promyka']="Mozna wgrywac pliki do 800KB!!!";
  15. $_SESSION['pokaz_komunikat_uploadu_promyka']='tak';
  16. header('Location: ../../panel_adm.php?str_log=insert_promyk');
  17. }
  18. else
  19. { $_SESSION['pokaz_komunikat_uploadu_promyka']='nie';
  20.   $_SESSION['polacz_serw']="Połączono z serwerem FTP.<br />";
  21. $_SESSION['color']='green';
  22. define('_SECURITY_',true);
  23. require('links/hasla/ftp_pass.php');
  24. $destination_file = $plik_nazwa;
  25. $destination_file2 = "../../pliki/$plik_nazwa";
  26. $source_file = realpath($plik_tmp);
  27. echo $destination_file.", ".$destination_file2.", ".$source_file."<br>";
  28.  
  29. $conn_ftp = ftp_connect(FTP_HOST);
  30. $login_result = ftp_login($conn_ftp, FTP_USER, FTP_PASSWORD);
  31. if ((!$conn_ftp) || (!$login_result))
  32. {
  33. $_SESSION['polacz_serw']="FTP connection has failed!";
  34. $_SESSION['color']='red';
  35. //echo "Attempted to connect to $ftp_server for user $ftp_user_name";
  36. }
  37. else
  38. {
  39.   $_SESSION['polacz_serw']="Połączono z serwerem FTP.<br />";
  40. $_SESSION['color']='green';
  41. ftp_pasv($conn_ftp,true);
  42. $upload = ftp_put($conn_ftp, $destination_file2, $plik_tmp, FTP_BINARY);
  43. if (!$upload)
  44. {
  45.   $_SESSION['ftp_upload']="Nie można skopiować pliku na serwer FTP!<br />";
  46. $_SESSION['color2']='red';
  47. }
  48. else
  49. {
  50.   $_SESSION['ftp_upload']="Plik został wysłany na serwer.<br />";
  51. $_SESSION['color2']='green';
  52.   $_SESSION['errorMessagePromyk']='Plik: '.$plik_nazwa.' o rozmiarze '.$plik_rozmiar.' bajtów został przesłany na serwer!';
  53. }
  54. ftp_close($conn_ftp);
  55. }
  56. /*
  57. $wysyl = move_uploaded_file($plik_tmp,$destination_file2);
  58. if(wysyl)
  59. {
  60.   $_SESSION['ftp_upload']="Plik został wysłany na serwer.<br />";
  61. $_SESSION['color2']='green';
  62.   $_SESSION['errorMessagePromyk']='Plik: '.$plik_nazwa.' o rozmiarze '.$plik_rozmiar.' bajtów został przesłany na serwer!';
  63. }
  64. else
  65. {
  66.   $_SESSION['ftp_upload']="Nie można skopiować pliku na serwer FTP!<br />";
  67. $_SESSION['color2']='red';
  68. }*/
  69. }
  70. }
  71. else
  72.  { echo "Nie można skopiować pliku.<br />";
  73. }
  74. }
  75. ?>
  76.  
  77. <div id="insert_promyk">
  78. <?php
  79. echo '<table class="ftp_messages"><tr><td id="promyk_info" colspan="2">';
  80. echo 'AKTUALNIE WSTAWIASZ PROMYK NA SERWER</td><tr>';
  81. if($_SESSION['pokaz_komunikat_uploadu_promyka']=='tak')
  82. {
  83. echo '<tr><td colspan="2" id="komun_upl_prom">'.$_SESSION['komunikat_uploadu_promyka'].'</td></tr>';
  84. $_SESSION['pokaz_komunikat_uploadu_promyka']='nie';
  85. }
  86. else
  87.   { echo '<tr><td class="yellow_name">Komunikat połączenia FTP:</td>';
  88. if(isset($_SESSION['polacz_serw']))
  89. {
  90. if($_SESSION['color']=='green')
  91. echo '<td class="green">'.$_SESSION['polacz_serw'].'</td>';
  92. else if($_SESSION['color']=='red')
  93. echo '<td class="red">'.$_SESSION['polacz_serw'].'</td>';
  94. $_SESSION['polacz_serw']="";
  95. }
  96. else
  97. echo '<td class="yellow">brak</td>';
  98. echo '</tr>';
  99.   echo '<tr><td class="yellow_name">Komunikat wysłania FTP:</td>';
  100. if(isset($_SESSION['ftp_upload']))
  101. {
  102. if($_SESSION['color2']=='green')
  103. echo '<td class="green">'.$_SESSION['ftp_upload'].'</td>';
  104. else if($_SESSION['color2']=='red')
  105. echo '<td class="red">'.$_SESSION['ftp_upload'].'</td>';
  106. $_SESSION['ftp_upload']="";
  107. }
  108. else
  109. echo '<td class="yellow">brak</td>';
  110. echo '</tr>';
  111. if(isset($_SESSION['errorMessagePromyk']))
  112. {
  113. echo '<tr><td id="error_message" colspan="2">'.$_SESSION['errorMessagePromyk'].'</td></tr></table>';
  114. $_SESSION['errorMessagePromyk']="";
  115. }
  116. else
  117. echo '<tr><td id="error_message" colspan="2">&nbsp;</td></tr></table>';
  118. }
  119. ?>
  120. <form enctype="multipart/form-data" action="<?php echo '../../panel_adm.php?str_log=insert_promyk&act=insert'?>" method="post">
  121. <table id="second_table">
  122. <tr>
  123. <td id="prom_title" colspan="2">
  124. Plik z promykiem:
  125. <input name="promyk" type="file">
  126. </td>
  127. </tr>
  128. <tr>
  129. <td id="subm">
  130.   <input type="submit" value="wyślij promyk">
  131. </td>
  132. <td id="res">
  133.   <input type="reset" value="wyczyść">
  134. </td>
  135. </tr>
  136. </table>
  137. </form>
  138. </div>
  139.  
  140.  





To co zakomentowane, to niedziałająca opcja z funkcją move_uploaded_file... 

Blame
  1. $wysyl = move_uploaded_file($plik_tmp,$destination_file2);
  2.  
  3. if($wysyl)
  4.  
  5. {
  6.  
  7. $_SESSION['ftp_upload']="Plik został wysłany na serwer.<br />";
  8.  
  9. $_SESSION['color2']='green';
  10.  
  11. $_SESSION['errorMessagePromyk']='Plik: '.$plik_nazwa.' o rozmiarze '.$plik_rozmiar.' bajtów został przesłany na serwer!';
  12.  
  13. }
  14.  
  15. else
  16.  
  17. {
  18.  
  19. $_SESSION['ftp_upload']="Nie można skopiować pliku na serwer FTP!<br />";
  20.  
  21. $_SESSION['color2']='red';
  22.  
  23. }

Zobacz teraz, jak dalej nie będzie działać to zobacz przez ftp czy pliki są na serwerze i powiedz czy skrypt wyświetla jakieś komunikaty/błędy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.