2017-08-25 148 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循环将不反正然后重复。