2013-01-25 57 views
1

我嘗試使用谷歌的API-PHP客戶端和它的基類是拋出以下錯誤:array_merge()[function.array合併]:參數#1不是一個數組

Severity: Warning 

Message: array_merge() [function.array-merge]: Argument #1 is not an array 

Filename: libraries/Google_Client.php 

Line Number: 107 

代碼周圍像107是一樣的東西:

public function __construct($config = array()) { 
    global $apiConfig; 
    $apiConfig = array_merge($apiConfig, $config); 
    self::$cache = new $apiConfig['cacheClass'](); 
    self::$auth = new $apiConfig['authClass'](); 
    self::$io = new $apiConfig['ioClass'](); 
    } 

我明白global $apiConfig尚未初始化爲數組,這就是爲什麼array_merge拋出錯誤。但是,當我將其更改爲global $apiConfig = array();,得到了另一個錯誤Parse error: syntax error, unexpected '=', expecting ',' or ';' in C:\Softwares\xampp\htdocs\testsaav\application\libraries\Google_Client.php on line 106

I am using Codeigniter 2.3 with XAMPP which has PHP 5.3

回答

2

初始化數組中的功能(如有必要)

public function __construct($config = array()) { 
    global $apiConfig; 
    $apiConfig = (isset($apiConfig) && is_array($apiConfig)) ? $apiConfig : array(); // initialize if necessary 
    $apiConfig = array_merge($apiConfig, $config); 
    self::$cache = new $apiConfig['cacheClass'](); 
    self::$auth = new $apiConfig['authClass'](); 
    self::$io = new $apiConfig['ioClass'](); 
    } 
+0

它爲我工作。謝謝。你能解釋爲什麼全局$ apiConfig = array();沒有在第一個地方工作? –

+1

聲明爲全局變量時,不能爲變量賦值。 –

+0

因爲你試圖宣佈你想在全球化的同時把它抹去。其次,這是Google正在修改的代碼。可能不是你想要的解決方案。你需要找出爲什麼代碼沒有加載在config.php中創建的$ apiConfig –

2

檢查服務器日誌,看看是否有相關的錯誤google_Client.php中的require_once('config.php')(如果找不到文件,腳本應該已經停止)。

當您執行您的require_once('Google_Client.php')時,將從該文件執行以下代碼。完成您的要求後,$ apiConfig應該對您的腳本可見。

// hack around with the include paths a bit so the library 'just works' 
set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path()); 

require_once "config.php"; 
// If a local configuration file is found, merge it's values with the default configuration 
if (file_exists(dirname(__FILE__) . '/local_config.php')) { 
    $defaultConfig = $apiConfig; 
    require_once (dirname(__FILE__) . '/local_config.php'); 
    $apiConfig = array_merge($defaultConfig, $apiConfig); 
} 

注意不要接觸config.php文件。如果你需要重寫那裏的任何東西,你可以創建local_config.php。

從我的PHP 5.3系統中我使用了這個腳本。下面顯示的腳本不會引發錯誤。取消設置$ apiConfig會複製您的錯誤。

<?php 

require_once('src/Google_Client.php'); 

print_r($apiConfig); 
// uncommenting the next line replicates issue. 
//unset($apiConfig); 
$api = new Google_Client(); 

?> 
相關問題