Неожиданный символ на входе: '\' (ASCII=92) состояние =1

Мой клиент говорит, что он получает эту ошибку, используя мой скрипт:

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /path/to//header.php  on line 34
Parse error: syntax error, unexpected T_STRING, expecting T_CONSTANT_ENCAPSED_STRING or '(' in/path/to/header.php  on line 34

Линия 34 в header.php просто use \Main\Class;

Теперь я сказал ему, что он должен иметь PHP >= 5.3.0 и он говорит, что его версия PHP 5.3.24

В чем может быть проблема?

РЕДАКТИРОВАТЬ: строки до и после

30. // Define absolute path
31. define("ABSPATH", $abs_path);
32. $_SESSION["abs_path"] = ABSPATH;
33. 
34. use \CNS\main\CNS;
35. $cns = new CNS();

РЕДАКТИРОВАТЬ 2:

Он послал мне это:

Program     Version
Apache:     2.2.24
CentOS:     CentOS release 6.4 (Final)
cPanel:     11.36.1 (build 8)
Curl:       7.12.1
MySQL       5.5.30
phpMyAdmin  3.5.5
Python:     2.6.6
Program     Version
Perl:       5.8.8
**PHP:        5.3.24**
ionCube Loader:     4.2.2
Zend Optimizer:     3.3.9
Ruby:       1.8.7
Rails:      3.2.8
OpenSSL:    1.0.0-fips

8 ответов

Это происходит, если вы пытаетесь использовать пространства имен, но не имеете PHP 5.3. PHP 5.2 и ниже не поддерживает пространства имен и выдает эту ошибку, когда видит обратную косую черту.

- Редактировать: перепутал версии. Это 5.2 и ниже, которые не имеют пространства имен, если я не ошибаюсь.

Теперь я сказал ему, что у него должен быть PHP >= 5.3.0, и он говорит, что его версия PHP - 5.3.24.

В чем может быть проблема?

Его версия PHP на самом деле < 5.3.0, независимо от того, знает он это или нет.

Смотрите ошибку, возникающую во многих версиях PHP.

Если после упомянутой ошибки вы получаете сообщение "неожиданная ошибка T_STRING", вам необходимо установить PHP 5.4+.

Попросите его создать файл с phpinfo(), Вероятно, у него нет версии PHP> = 5.3.0.

Как говорят другие пользователи: использование пространств имен допустимо только для версий PHP выше 5.3.0, поэтому мое решение, позволяющее включить необязательное использование библиотеки с использованием пространств имен, состоит в том, чтобы проверить версию php и использовать функцию eval(), чтобы избежать что более низкие версии PHP выдают ошибку.

Что-то вроде этого:

if ( phpversion() > '5.3.0' ){
    include_once('/path/to/Library.php'); 
    eval("Library\Foo::bar();"); 
}
<FilesMatch "\.(inc|php|php3|php4|php44|php5|php52|php53|php54|php55|php56|phtml|phps)$">

 AddHandler x-httpd-php53 .php

</FilesMatch>

в.htaccess

Я столкнулся с той же проблемой, и, проведя некоторые исследования, мне удалось ее исправить. В моем случае я использую PHP7, и мне нужно было отредактировать файл laravel, расположенный в ~/.composer/vendor/laravel/installer/где была линия Шебанга #!/usr/bin/env php Я поменял на #!/usr/bin/env php7

После запуска снова ремесленник, я получил это работает:

-bash-3.2$ laravel
Laravel Installer version 1.3.3

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  help  Displays help for a command
  list  Lists commands
  new   Create a new Laravel application.

В моем случае я запускал Vagrant с Virtualbox, и в Oracle существует известная ошибка с системным вызовом sendfile, из-за которой файлы читаются только частично, если они находятся в общей папке. Возможные исправления включают добавление в конфигурацию nginx.

       sendfile off;

Но это не всегда помогает. В моем последнем случае помогло простое редактирование файла (добавление комментария или пробела), его повторное сохранение и, наконец, перезапуск php-fpm.

Другие вопросы по тегам