Синтаксическая ошибка при разборе INI-файла в PHP - PullRequest
2 голосов
/ 04 июля 2019

Я пытался разобраться в ошибке, но не могу ее решить. Может кто-нибудь помочь с этим. Спасибо.

Предупреждение: синтаксическая ошибка, неожиданный '(' в D: \ langEn.ini в строке 4 в D: \ Xampp \ htdocs \ PhpProject1 \ companyinfo.php в строке 12

class CompanyInfo
{
    function parse_files()
    {
        //files created for localization
        $file1 = "D:\langEn.ini";
        $file2 = "D:\jap.ini";

        if($file1 == TRUE)
        {
            print_r(parse_ini_file($file1));
        }
        else
        {
            print_r(parse_ini_file($file2));
        }

    }
}

$obj = new CompanyInfo;
$obj ->parse_files();

Выход:

Company Name:
Unikaihatsu Software Private Limited

HO Address(Mumbai):
33-34, Udyog Bhavan, Sonawala Lane,
Goregaon (East), Mumbai, India, PIN 400-063
Phone:+91-22-26867334 Fax:+91-22-26867334
URL: http://www.usindia.com

Branch Office(Ahemdabad):
Unitech Systems 
A/410, Mardia Plaza, Near G. L. S. College,
C. G. Road, Ahmedabad, India, PIN 380-006
Phone:+91-79-26461287 Fax:+91-79-40327081
URL: http://www.usindia.com

Branch Office(Indore):
1st Floor, MPSEDC-STP Building, 
Electronics Complex, 
Pardeshipura, Indore, India, PIN 452010
Phone : +91-731-4075738 Fax : +91-731-4075738
URL : http://www.usindia.com

1 Ответ

1 голос
/ 05 июля 2019

Я думаю, что причина ошибки в том, что вы не можете использовать определенные символы в своем INI-файле.

В вашем случае такие записи, как HO Address(Mumbai), недопустимы из-за скобок ( и ).

Из руководства по PHP:

Символы ?{}|&~![()^" не должны использоваться где-либо в ключе и имеют специальное значение в значении.

Вы можете прочитать больше в документации parse_ini_file () .


PS Приведенное выше является причиной ошибки, о которой вы спрашивали, но это не единственная проблема, с которой вы столкнетесьвстреча.

Вам следует просмотреть структуру вашего файла в целом, так как она не соответствует стандартному формату ini .Файл INI обычно должен иметь вид

[simple]
val_one=SomeValue
val_two=567

[simple2]
val_three=SomeOtherValue
val_four=890

, где [simple] обозначает раздел, а затем val_one, val_two и т. Д. Являются ключами, а SomeValue, 567 и т. Д.являются ценностями.Синтаксический анализ вышеприведенного использования функций PHP parse_ini_* приведет к выдаче либо

Array
(
    [val_one] => SomeValue
    [val_two] => 567
    [val_three] => SomeOtherValue
    [val_four] => 890
)

, либо

Array
(
    [simple] => Array
        (
            [val_one] => SomeValue
            [val_two] => 567
        )

    [simple2] => Array
        (
            [val_three] => SomeOtherValue
            [val_four] => 890
        )
)

в зависимости от того, установлен флаг $process_sections в значение false или true.Демонстрационная версия: https://3v4l.org/4q82F

Также это немного странные данные для хранения в INI-файле - эти файлы обычно используются для хранения таких вещей, как настройки приложения, тогда как ваши офисные адреса, вероятно, больше подходят для хранения в базе данных.(или, по крайней мере, в файле JSON), где будет а) больше структуры и б) меньше ограничений на использование не алфавитно-цифровых символов.

...