php通過ftp協議上傳檔案

技術小胖子發表於2017-11-01

  1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> 
  2. <html xmlns=“http://www.w3.org/1999/xhtml”> 
  3. <head> 
  4. <meta http-equiv=“Content-Type” content=“text/html; charset=GBK” /> 
  5. <script> 
  6. function send(){ 
  7. document.form2012.action=“up.php”
  8. document.form2012.submit(); 
  9. function save(){ 
  10. document.form2012.action=“up_save.php”
  11. document.form2012.submit(); 
  12. </script> 
  13. </head> 
  14. <body> 
  15. <?php 
  16. $username=`test10086`
  17. if($_POST){ 
  18.     $postid=$_POST[`postid`]; 
  19.     if($postid==`1`){ 
  20.  
  21.         $conn_id=ftp_connect(`test.com`,`6305`) or die(“連線失敗”); 
  22.         $ftp_user = “root”
  23.         $ftp_pass = “123456”
  24.         if(@ftp_login($conn_id, $ftp_user, $ftp_pass)){ 
  25.             //echo `登入ftp成功`; 
  26.         } 
  27.         else{ 
  28.             echo `登入ftp失敗`; 
  29.         } 
  30.          
  31.         $file_name=$_FILES[“file”][“name”][`0`]; 
  32.         $file_size=$_FILES[“file”][“size”][`0`]; 
  33.         $temp_url=$_FILES[“file”][“tmp_name”][`0`]; 
  34.         $source_file=$temp_url; 
  35.         $remote_file=`www.test.com/test/upvideo_files/`.$file_name; 
  36.         if(ftp_put($conn_id, $remote_file, $source_file, FTP_BINARY)){ 
  37.             //echo `檔案上傳成功`; 
  38.         } 
  39.         else{ 
  40.             echo `檔案上傳失敗`; 
  41.         } 
  42.          
  43.         $file_name01=$_FILES[“file”][“name”][`1`]; 
  44.         $temp_url01=$_FILES[“file”][“tmp_name”][`1`]; 
  45.         $source_file01=$temp_url01; 
  46.         $remote_file01=`www.test.com/test/upvideo_images/`.$file_name01; 
  47.         if(ftp_put($conn_id, $remote_file01, $source_file01, FTP_BINARY)){ 
  48.             //echo `圖片上傳成功`; 
  49.         } 
  50.         else{ 
  51.             echo `圖片上傳失敗`; 
  52.         } 
  53.          
  54.         ftp_close($conn_id); 
  55.     } 
  56.     elseif($postid==`2`){ 
  57.         $conn_id=ftp_connect(`test.com`,`6305`) or die(“連線失敗”); 
  58.         $ftp_user = “root”
  59.         $ftp_pass = “123456”
  60.         if(@ftp_login($conn_id, $ftp_user, $ftp_pass)){ 
  61.             //echo `登入ftp成功`; 
  62.         } 
  63.         else{ 
  64.             echo `登入ftp失敗`; 
  65.         } 
  66.          
  67.         $file_name=$_FILES[“file”][“name”]; 
  68.         $file_size=$_FILES[“file”][“size”]; 
  69.         $temp_url=$_FILES[“file”][“tmp_name”][`0`]; 
  70.         $source_file=$temp_url; 
  71.         $remote_file=`www.test.com/test/upvideo_files/`.$file_name; 
  72.         if(ftp_put($conn_id, $remote_file, $source_file, FTP_BINARY)){ 
  73.             //echo `檔案上傳成功`; 
  74.         } 
  75.         else{ 
  76.             echo `檔案上傳失敗`; 
  77.         } 
  78.         ftp_close($conn_id); 
  79.     } 
  80. ?> 
  81.  
  82. <?php 
  83.     if($_GET[`fid`]){ 
  84.         $fid=$_GET[`fid`]; 
  85.         include(`../conn.php`); 
  86.         $sql=“select * from `upload_video` where `id`=`$fid`;”
  87.         $query=mysql_query($sql,$conn); 
  88.         $row=mysql_fetch_array($query);
  89. ?> 
  90.     <form action=“” method=“post” enctype=“multipart/form-data” name=“form2012”> 
  91.         <input type=“hidden” name=“postid” value=“2” /> 
  92.         <input type=“hidden” name=“fid” value=“<?php echo $fid?>” /> 
  93.         標題:<input type=“text” name=“title” value=“<?php echo $row[`title`]?>” /><br /> 
  94.         簡介:<textarea name=“introduce”><?php echo $row[`introduce`]?></textarea><br /> 
  95.         所屬分類:<?php echo $row[`sortid`]?><br /> 
  96.         標籤:<input type=“text” name=“tag” value=“<?php echo $row[`tag`]?>” /><br /> 
  97.         售價:<input type=“text” name=“gold” value=“<?php echo $row[`gold`]?>” /><br /> 
  98.         新增視訊:   <input type=“file” name=“file” /> 
  99.     <input type=“button” value=“新增” onclick=“send();”> 
  100.  
  101.      
  102.     <br /><br /> 
  103.     分段視訊列表:<br /> 
  104.         <table border=“1” style=“width:400px;border-collapse:collapse;text-align:center” cellspacing=“0” cellpadding=“0”> 
  105.             <tr> 
  106.                 <td>序號</td> 
  107.                 <td>在頁面顯示的名稱標題</td> 
  108.                 <td>檔名</td> 
  109.             </tr> 
  110.         <?php 
  111.             $sql03=“select * from `upload_video` where `username`=`$username` and `fid`=`$fid`”
  112.             $query03=mysql_query($sql03); 
  113.             $i=1
  114.             while($row03=mysql_fetch_array($query03)){ 
  115.                  
  116.         ?> 
  117.             <tr> 
  118.                 <td><?php echo $i++?></td> 
  119.                 <td> 
  120.                     <input type=“hidden” name=“upnameid[]” value=“<?php echo $row03[`id`]?>” /> 
  121.                     <input type=“text” name=“upname[]” value=“<?php echo $row03[`small_title`]?>” /> 
  122.                 </td> 
  123.                 <td><?php echo $row03[`file_name`]?></td> 
  124.             </tr> 
  125.         <? 
  126.             } 
  127.         ?> 
  128.         </table> 
  129.  
  130.     <br /> 
  131.     <br /> 
  132.     <a href=“#” onclick=“save();”><img src=“../images/v_up.jpg” /></a> 
  133.     </form> 
  134.     <br /> 
  135.     封面:<br /><img src=“<?php echo $row[`img_url`]?>” width=“150” height=“120” border=“1” /><br /> 
  136.  
  137.  
  138. <?php 
  139.     }else{ //下面是第一次新增檔案
  140. ?> 
  141.  
  142.  
  143. <form action=“” method=“post” enctype=“multipart/form-data” name=“form2012”> 
  144.     <input type=“hidden” name=“postid” id=“postid” value=“1” /> 
  145.     標題:<input type=“text” name=“title” /><br /> 
  146.     簡介:<textarea name=“introduce”></textarea><br /> 
  147.     所屬分類:1<br /> 
  148.     標籤:<input type=“text” name=“tag” /><br /> 
  149.     售價:<input type=“text” name=“gold” /><br /> 
  150.     <input type=“file” name=“file[]” /><br /> 
  151.     <input type=“file” name=“file[]” /><br /> 
  152.     <input type=“button” value=“新增” onclick=“send();”> 
  153.     <br /> 
  154.     <br /> 
  155.     <a href=“#” onclick=“save();”><img src=“../images/v_up.jpg” /></a> 
  156.  
  157. </form> 
  158. <br /> 
  159.  
  160.  
  161. <?php 
  162.     } 
  163. ?> 
  164.  
  165. </body> 
  166. </html> 

 

 

 


問題:

今天公司將網站從linux遷到windows伺服器,突然上傳出現問題了,檔案上傳不了,報錯:

Warning: file_exists() [function.file-exists]: open_basedir restriction in effect. File(C:WINDOWSTempphp6F44.tmp) is not within the allowed path(s): (D:htdocs)…

許可權問題:不允許操作伺服器設定的路徑之外的檔案路徑。

 

許可權問題,不允許操作伺服器設定的路徑之外的檔案路徑。

解決辦法:找網管(或空間商)修改,apache下的httpd.conf   或者   php下的php.ini。

修改apache中(級別最高,父級別,其許可權幣php.ini還高):

記得後面有兩個路徑:一個是指定的,另一個是預設的(C:WindowsTemp)。


  1. <virtualhost *> 
  2.     <directory “../vhosts/zf.com”
  3.         Options -Indexes FollowSymLinks 
  4.     </directory> 
  5.     ServerAdmin admin@zf.com 
  6.     DocumentRoot “../vhosts/zf.com” 
  7.     ServerName zf.com:80 
  8.     ServerAlias *.zf.com 
  9.     ErrorLog logs/zf.com-error_log 
  10.     php_admin_value open_basedir D:/htdocs;C:WindowsTemp;” 
  11. </virtualhost> 

 

修改php.ini中

 


  1. open_basedir = “D:/htdocs;C:/WINDOWS/Temp; 

 

更詳細的關於:open_basedir配置的

http://chenling1018.blog.163.com/blog/static/148025420087250851438/

http://tunps.com/php-open_basedir

http://www.cnblogs.com/ybbqg/archive/2012/05/04/2482479.html

 

 


 

注意php.ini設定包括:

 


  1. upload_max_filesize = 1024M 
  2. post_max_size = 1024M 
  3. max_input_time = 3600 
  4. memory_limit = 32M 
  5. max_execution_time = 0  //php執行時間無限制 

max_execution_time預設是30秒,沒有設定這個可能報錯:

Fatal error: Maximum execution time of 30 seconds exceeded

注意:當php執行於安全模式時,set_time_limit(0)此功能不能生效。除了關閉安全模式或改變php.ini中的max_execution_time時間限制,沒有別的辦法。

 

這裡有一篇關於php通過ftp上傳大檔案的研究報告:

http://wenku.baidu.com/view/daa108687e21af45b307a8e3.html

 

 

大部分PHP程式碼執行時間都不會很久。但是有些時候,比如等待圖片上傳,可能執行時間過長導致超時。

php.ini 中預設的最長執行時間是 30 秒,這是由 php.ini 中的 max_execution_time 變數指定,倘若你有一個需要頗多時間才能完成的工作,例如要傳送很多電子郵件給大量收件者,或者要進行繁重的資料分析工作,伺服器會在 30 秒後強行中止正在執行的程式,如何解決這個問題呢。 

最簡單當然是修改 php.ini 中 max_execution_time 的數值,不過不是所有人都有權修改 php.ini,例如使用網頁寄存的開發人員,伺服器上的 php.ini 由很多網站共同使用,所以不能隨意修改。 

另一個辦法是在 PHP 程式中加入 ini_set(`max_execution_time`, `0`),數值 0 表示沒有執行時間的限制,你的程式需要跑多久便跑多久。若果你的程式仍在測試階段,推薦你把時限設定一個實數,以免程式的錯誤把伺服器當掉。

 


  1. <?php 
  2. //max_execution_time=100; 
  3. ini_set(“max_execution_time”, 1); //用此function才能真正在執行時設定 
  4. for($i=1; $i< 100000; $i++) 
  5. echo “No. {$i}
  6. echo `<br />`
  7. flush(); 
  8. ?>  

同時可以使用ini_get把原來設定的max_execution_time儲存下來,在進行完操作時回覆原來的設定值。

 

當然如果你只是想想php的配置資訊用phpinfo()更方便

  ini_set具有更改php.ini設定的功能。此函式接收兩個引數:需要調整的配置變數名,以及變數的新值。   例如,在某指令碼出現時增加最大執行時間(maximum execution time):

 


  1. <?php 
  2. ini_set(`max_execution_time`, 600) 
  3. // more code 
  4. ?> 

這樣的設定將僅僅影響被設定的指令碼。一旦指令碼執行完畢,該變數將自動恢復到原始值。

      本文轉自許琴 51CTO部落格,原文連結:http://blog.51cto.com/xuqin/940955,如需轉載請自行聯絡原作者


相關文章