0

嘿伙计们,我现在正在处理三件事,我正在努力解决,希望你能提供帮助。我的代码中有错误、警告和通知,我想修补它,希望您能帮助我,错误如下。

有奇妙的错误

PHP Warning:  Invalid argument supplied for foreach() in php/libraries/RotateLatestAssets.class.php on line 35
PHP Notice:   Undefined variable: config in php/libraries/RotateLatestAssets.class.php on line 18
PHP Notice:   Undefined variable: json in php/libraries/RotateLatestAssets.class.php on line 31
PHP Notice:   Undefined variable: json in php/libraries/RotateLatestAssets.class.php on line 32

然后我在我的代码中注释掉了一个非常奇怪的问题......我在想侏儒,但谁知道......

这是课程

<?php

class RotateLatestAssets
{
    protected   $config;

    public function __construct()
    {
        $this->config = $config;
    }

    //********************************************************************************
    //* Public Methods
    //********************************************************************************

    public function getAssets()
    {

        $this->json = self::jsonDecode($this->config, true);


        define('latest',    __DIR__ . $json['paths']['latest']);
        define('dist',      __DIR__ . $json['paths']['dist']);


        foreach($this->json['files'] as $fileName => $fileVersion)
        {
            $cacheName = implode("-$fileVersion.", explode('.',$fileName) );
            if(!file_exists(dist . $cacheName))
            {
                try {
                    copy(latest . $cacheName, dist . $fileName);
                } catch(Exception $e) {
                    echo 'Copy Exception: ',  $e->getMessage(), "\n";
                }
            }
        }

    }

    //********************************************************************************
    //* Static Methods
    //********************************************************************************

    /**
    * Returns a json decoded object or array
    *
    * @param    string  $json
    * @param    bool    $toAssoc
    * @return   object|array Depending on the parameter supplied
    */

    private static function jsonDecode($json, $toAssoc = true)
    {

        /** 
         * Based on known JSON_DECODE() errors
         * 0 = JSON_ERROR_NONE
         * 1 = JSON_ERROR_DEPTH
         * 2 = JSON_ERROR_STATE_MISMATCH
         * 3 = JSON_ERROR_CTRL_CHAR
         * 4 = JSON_ERROR_SYNTAX
         * 5 = JSON_ERROR_UTF8
         */

        $result = json_decode($json, $toAssoc);

        /*  Will produce this sometimes out of the blue after a few refreshes?

            PHP Fatal error:  Uncaught exception 'Exception' with message 
            'JSON Error:  - Syntax error, malformed JSON' in php/libraries/RotateLatestAssets.class.php:99

            Stack trace:
            #0 php/libraries/RotateLatestAssets.class.php(28): RotateLatestAssets::jsonDecode(NULL, true)
            #1 php/libraries/RotateLatestAssets.class.php(119): RotateLatestAssets->getAssets()
            #2 {main}
              thrown in php/libraries/RotateLatestAssets.class.php on line 99
        */

        switch(json_last_error())
        {
            case JSON_ERROR_DEPTH:
                $error =  ' - Maximum stack depth exceeded';
                break;
            case JSON_ERROR_STATE_MISMATCH:
                $error = ' - Invalid or malformed JSON encoding';
                break;
            case JSON_ERROR_CTRL_CHAR:
                $error = ' - Unexpected control character found';
                break;
            case JSON_ERROR_SYNTAX:
                $error = ' - Syntax error, malformed JSON';
                break;
            case JSON_ERROR_UTF8:
                $error = ' - Syntax error, malformed UTF-8 characters';
                break;
            case JSON_ERROR_NONE:
            default:
                $error = ''; 
        }

        if (!empty($error)) throw new Exception('JSON Error: '.$error);
        return $result; 
    }

    /**
    * Returns bool value for state of array recieved dev:(true) live:(false)
    *
    * @param    array   $array
    * @return   bool
    */

    private static function checkMode($array)
    {
        if(!is_array($array)) throw new Exception("Wrong Type Passed. Expecting (array), received (".gettype($array).")");
        return ($array['dev'] == 'true') ? true : false;
    }
}


$instance = new RotateLatestAssets($_SERVER['DOCUMENT_ROOT'].'build/config.json');
$instance->getAssets();

?>
4

1 回答 1

2

在您的构造函数中,您有:

$this->config = $config;

然而,该$config变量从未被创建,因此它没有任何价值。

你在getAssets(). 您使用$json,但它从未被定义。

无效参数错误是因为您本质上做foreach(null的是错误的,您只能迭代一个数组。

于 2012-05-18T22:47:40.297 回答