2013-03-12 54 views
-1

我試圖寫一個PHP腳本在我的本地機器的crontab來安裝將:PHP:無法弄清楚如何將多級變量的名稱轉換爲字符串?

1)登錄到遠程FTP服務器
2)獲取文件的列表
3)下載其中任何文件從今天上午12:00開始創建。

我已經能夠散列一些代碼示例,並接近我的預期結果。但是,我已經變得相當卡住了一點。爲了獲得新的文件,我不得不使用ftp_rawlist函數。這將返回一個嵌套數組,其中每個文件都被表示爲包含表示其屬性(用戶,組,大小等)的元素的數組。我能夠與數組的項目進行交互,但是一旦我找到了想要下載的「數組」,我就很難做到這一點。

代碼

<?php 

    // define function to sync directory structure via ftp; 

    date_default_timezone_set('America/New_York'); 
    chdir('/Users/robotlaptop/Desktop/phpfiles'); 

    // define some login credentials 
    $ftp_username = 'xxx'; 
    $ftp_userpass = 'xxx'; 
    $ftp_server = 'xxx'; 
    // set up a connection 
    $conn_id = ftp_connect($ftp_server); 
    $login_result = ftp_login($conn_id, $ftp_username, $ftp_userpass); 
    $sync_compare = date('d M'); 

    // set passive mode on 
    ftp_pasv($conn_id, true); 

     function listDetailed($resource, $directory = '.') { 
      if (is_array($children = @ftp_rawlist($resource, $directory))) { 
       $items = array(); 
       global $conn_id; 
       global $sync_compare; 
       foreach ($children as $child) { 
        $chunks = preg_split("/\s+/", $child); 
        list($item['rights'], $item['number'], $item['user'], $item['group'], $item['size'], $item['month'], $item['day'], $item['time']) = $chunks; 
        $item['type'] = $chunks[0]{0} === 'd' ? 'directory' : 'file'; 
        array_splice($chunks, 0, 8); 
        $items[implode(" ", $chunks)] = $item; 
        $synctest = $item['day'] . ' ' . $item['month']; 

        if ($sync_compare == $synctest) { 
         ftp_get($conn_id, 'testfile', $file, FTP_BINARY); 
         } 


        } 

       return $items; 
      } 

      // Throw exception or return false < up to you 
     } 


    $testme = listDetailed($conn_id, '/'); 

    print_r($testme); 
    //print_r($testme); 

    ftp_close($conn_id); 

?> 

從上面的問題是最具體的是我無法找出如何在表示文件名變爲給予第三個參數的陣列的名稱傳出現在循環內部的ftp_get函數。我已經嘗試將$ file更改爲$ items,這在概念上是合理的,除非這是數組的名稱,所以它不起作用。如果我猜對了,我需要弄清楚如何獲得一個代表文件名字符串的變量。如果您查看print_r的輸出(下面),您會看到每個文件名都映射到一個鍵值。

對不起,如果這個問題是如此的基礎,我是編程新手。

輸出的

print_r($testme)

Array 
    (
     [dandelions.txt] => Array 
      (
       [time] => 16:12 
       [day] => 12 
       [month] => Mar 
       [size] => 21 
       [group] => 0 
       [user] => 0 
       [number] => 1 
       [rights] => -rw-r--r-- 
       [type] => file 
      ) 

     [goobs.txt] => Array 
      (
       [time] => 21:34 
       [day] => 29 
       [month] => Nov 
       [size] => 31 
       [group] => 0 
       [user] => 0 
       [number] => 1 
       [rights] => -rw-r--r-- 
       [type] => file 
      ) 

    ) 
+0

尋找陣列功能[ '鍵()'](http://php.net/manual/en/function.key.php)? – ficuscr 2013-03-12 17:59:59

+2

只是供參考,用**可能是一個啞巴問題開始你的問題**使我動力不足以繼續閱讀。 – nickb 2013-03-12 18:00:26

+0

沒有地方上的悲哀:)堅持標誌。 – ficuscr 2013-03-12 18:11:02

回答

1

你可以訪問陣列鍵的foreach如下,假設文件數組$files

foreach ($files as $file_name => $file_info) { 

... 

} 
+0

謝謝!我會試試這個。 – AardvarkApostrophe 2013-03-13 14:05:28

1

得到公正數組的鍵,你可以使用array_keys

例如:

$array = [ 
    'hello.txt' => [ 
     'somerandomdata', 
     'somemorerandomdata', 
     'evenmore' 
    ], 
    'newfile.txt' => [ 
     'blah', 
     'randomdata' 
    ] 
]; 
print_r(array_keys($array)); 

將返回

Array 
(
    [0] => hello.txt 
    [1] => newfile.txt 
) 
+0

非常感謝!我現在正在嘗試這個。 – AardvarkApostrophe 2013-03-13 14:05:47