2017-08-25 124 views
-2

會有人心中檢查下面的PHP代碼。 https://www.linuxliteos.com/test_info/download.php返回:無效參數

警告: /home/myhosthere/public_html/test_info/download.php爲的foreach()供給線27

<? 
ini_set('max_execution_time', '18000'); 
require_once('config.php'); 
$ftp_server = 'ftpipaddresshere'; 
$ftp_user_name = 'user'; 
$ftp_user_pass = 'password'; 
$conn_id = @ftp_connect($ftp_server, 21); 
if(!$conn_id) 
{ 
    echo 'Error: Some problem in Connecting to Server!'; 
} 
else 
{ 
    ftp_pasv($conn_id, true); 
    $login_result = @ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
    if(!$login_result) 
    { 
     $error_msg = 'Error: Some problem in Connecting to Vendor Server! Cron Job failed on '.date('m/d/Y H:i:s'); 
    } 
    else 
    { 
     $arr_files = ftp_rawlist($conn_id, './upload'); 

     $arr_list = array(); 
     if(count($arr_files)) 
     { 
      foreach($arr_files as $str_file) 
      { 
       preg_match('|-rw-r--r-- 1 hwdb  hwdb.+ (\d+) ([a-zA-Z]{3} .+\d+ \d+\:\d+) (.*)|', trim($str_file), $arr_details); 
       $arr_list[] = $arr_details[3]; 
      } 
     } 
     $arr_final_list = array(); 
     foreach($arr_list as $file_name) 
     { 
      if (@ftp_get($conn_id, '/home/myhost/public_html/test_info/upload/'.$file_name, 'upload/'.$file_name, FTP_BINARY)) { 
       $arr_final_list[] = $file_name; 
       //chmod('upload/'.$file_name, 0666); 
       echo "processed"; 
       //Now do ftp delete 
       ftp_rename($conn_id, 'upload/'.$file_name, 'processed/'.$file_name); 
      } 
      else 
      { 
       echo "error"; 
      } 
     } 
    } 
} 
?> 

的config.php

參數無效
<? 
$host="localhost"; 
$user="dbuser"; 
$password="password"; 
$database="db"; 
$conn = mysqli_connect($host,$user,$password,$database); 

?> 

預先感謝您。

+2

使用'var_dump'檢查什麼類型的變量實際上是它們包含在該點什麼。 – CBroe

+0

取代'$ arr_files = ftp_rawlist($ conn_id, './upload');''到$ arr_files =陣列(); $ arr_files = ftp_rawlist($ conn_id, './upload');' – diavolic

回答

1

功能ftp_rawlist可以返回false

返回,其中每個元素對應於一個文本行的陣列。傳遞目錄無效時返回FALSE

這樣會使$arr_files爲假。用PHP有趣的是,它爲count(false)返回1。

所以,你會那麼需要測試這種情況:

if ($arr_files !== false) 

沒有必要檢查次數,因爲foreach循環將不反正然後重複。