Недавно я разместил свой сайт в Magento, после настройки моего cron.php я получил следующий вывод:
/home/xxx/webapps/abc/cron.php: line 1: ?php
: No such file or directory
/home/xxx/webapps/abc/cron.php: line 2: /**
: No such file or directory
/home/xxx/webapps/abc/cron.php: line 3: bin: command not found
/home/xxx/webapps/abc/cron.php: line 4: $'*\r': command not found
/home/xxx/webapps/abc/cron.php: line 5: bin: command not found
/home/xxx/webapps/abc/cron.php: line 6: $'*\r': command not found
/home/xxx/webapps/abc/cron.php: line 7: syntax error near unexpected token `('
/home/xxx/webapps/abc/cron.php: line 7: ` * This source file is subject to the Open Software License (OSL 3.0)
‘
Я размещаю это в Webfaction, и кажется, что эта ошибка происходит только в Webfaction. Мой другой веб-сайт (использующий ту же версию Magento), который размещен на другом сервисе, работает нормально.
Даже после того, как я удалил следующие строки в cron.php, он все равно не работает:
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magento.com for more information.
*
* @category Mage
* @package Mage
* @copyright Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
Я также пытался поставить «Шебанг» как раз перед
#!/usr/local/bin/php
И получить этот результат:
/usr/local/bin/php^M: bad interpreter: No such file or directory
Я подозреваю, что может быть что-то не так с кодировкой. Кто-нибудь может мне с этим помочь ?
Вероятно, не столько кодирование, сколько переводы строк.
Разные операционные системы использовать разные комбинации символов возврата каретки и перевода строки в ASCII. Windows использует возврат каретки + перевод строки (коды ASCII 0x0D + 0x) в качестве разделителя строк. Linux / Unix использует только перевод строки (код ASCII 0x0A).
Когда ты видишь ^M
, обычно он говорит вам, что в тексте есть непечатаемый символ (если только у вас нет букв Caret + M, что было бы необычно). Вы можете увидеть карту управляющих символов и их «обозначение каретки» здесь (первая таблица после якоря, столбец [b]): https://en.wikipedia.org/wiki/ASCII#Control_characters
Учитывая, что ^ M — это символ возврата каретки, который не используется в Linux и используется до перевода строки в Windows, я сначала подумал, что ваш файл редактируется в Windows, а затем отправляется на сервер Linux. Linux не может интерпретировать строку shebang с окончанием строки CRLF в Windows, так что это объясняет проблему Шебанга.
Тем не менее, PHP разработан для обработки CRLF в их интерпретаторе, поэтому я сомневаюсь, что это первая проблема. Вы не описали, как именно выполняется файл, поэтому я предполагаю, что вы следуя этим инструкциям. Если мое предположение верно, то вы используете три строки cron, описанные здесь: http://devdocs.magento.com/guides/v2.0/config-guide/cli/config-cli-subcommands-cron.html#create-the-cron-job. В этом случае я бы предположил, что используется неправильная версия PHP. Я думаю о WebFaction, версия PHP по умолчанию, если вы используете /usr/local/php
это 5.2 и Magento 2.1 требует PHP 5.6. это может быть вашей проблемой, но без более подробной информации, трудно определить.
Других решений пока нет …