Прошло много времени с тех пор, как я опубликовал свою статью «Начало работы с PHP на GAE» , и платформа работала лучше, чем кто-либо ожидал. Запрос функции PHP по-прежнему находится в верхней части списка NFR , а созданная мной тогда Phalcon NFR сейчас находится на вершине 17-го места, что указывает не только на распространение и популярность Phalcon, но и на жизнеспособность сообщества PHP и наше желание увидеть его распространение в профессиональной крупномасштабной корпоративной среде.
26 февраля конец пакета SDK GoogleAppEngine для PHP и Python был обновлен до версии 1.9.0 , и в этой статье мы расскажем, что изменилось в отношении PHP. Вы можете найти полную информацию о выпуске здесь .
Обновления
Новая версия для переводчика
Интерпретатор PHP был обновлен с PHP 5.4.19 до PHP 5.4.22.
Я не уверен, почему GAE не использует последнюю версию PHP, но любое обновление — это хорошее обновление.
5.4.20 исправлено несколько десятков ошибок, присутствующих в 5.4.19, связанных с ошибками сегмента, некорректным кодированием символов пробела при использовании режима печати в кавычках, утечками памяти (особенно в cURL), некоторыми исправлениями, связанными с расширением, и многим другим.
5.4.21. предотвратил запуск автоматической загрузки при ошибках времени компиляции, убедился, что встроенный сервер обрабатывает все заголовки http как нечувствительные к регистру, улучшены сообщения об ошибках в классе DateTime, исправлен скрипт настройки IMAP и многое другое.
Наконец, 5.4.22. исправлено еще несколько ошибок, связанных со встроенным сервером, FTP, Exif, ODBC, Sockets, XMLReader и другими компонентами. Вы можете увидеть все различия в журнале изменений версии 5 .
Последняя версия 5.4. является 5.4.26., и мы надеемся, что GAE примет его в ближайшее время, поскольку он содержит некоторые важные исправления.
Автозагрузка файлов SDK
Автозагрузка теперь доступна в SDK, поэтому разработчикам больше не нужно явно запрашивать файлы SDK.
Ранее, чтобы использовать классы SDK для определенных сервисов Google в GAE, вы должны были вручную включать их или писать автозагрузчик, который сделал это за вас. Эти классы теперь автоматически загружаются по умолчанию, поэтому использовать такой класс, как google\appengine\api\mail\Message
, так же просто, как ссылаться на него.
Все примеры на сайте документации GAE SDK были обновлены, чтобы отразить это.
Вместо того
require_once 'google/appengine/api/mail/Message.php' ;
use google\appengine\api\mail\Message ;
теперь у вас есть только
use google\appengine\api\mail\Message ;
Включает из ведра
Расширенная настройка php.ini
google_appengine.allow_include_gs_buckets
позволяющая включить фильтр путей для повышения безопасности.Предупреждающее сообщение
E_USER_WARNING
теперь срабатывает, если приложение перемещает загруженный пользователем файл вE_USER_WARNING
/ путь Google Cloud Storage. Это связано с тем, что код может быть включен и привести к локальной уязвимости включения файлов.
Эти два обновления идут в тандеме.
Как правило, можно включать файлы из сегментов облачного хранилища Google, если эти сегменты определены в файле php.ini
в параметре google_appengine.allow_include_gs_buckets
. Значением этого параметра является строка со значениями, разделенными запятыми, например: "bucket_1, bucket_2"
.
Первое обновление означает, что теперь мы можем включать подпапки в пути сегментов для дополнительной безопасности. Таким образом, вместо разрешения включений из любого места в bucket_1, мы можем разрешить bucket_1/includes_allowed
только из bucket_1/includes_allowed
, например так:
google_app_engine . allow_include_gs_buckets = "bucket_1/includes_allowed"
Это позволяет использовать ваше ведро для нескольких аспектов — для включения классов и файлов, а также для общего хранения других типов.
Второе обновление означает, что PHP выдаст предупреждение, если вы выполните перемещение загруженного файла в корзину с разрешенным включением. Это сделано для того, чтобы пользователи не могли загружать сценарии PHP в папку, из которой они могут быть включены, чтобы предотвратить атаки LFI . Когда вы видите это предупреждение, вы должны изменить свое приложение так, чтобы оно перемещало пользовательские загрузки в запрещенную часть корзины.
Бесплатный стандартный GCS Bucket, средства доступа к метаданным
Недавно созданные приложения App Engine теперь имеют корзину Google Cloud Storage, автоматически создаваемую в рамках того же Google Cloud Project.
Ранее, если вы хотели использовать хранилище Google Cloud Storage для записи файлов, вам нужно было создать его отдельно и настроить для использования с приложением GAE PHP. Однако, поскольку приложения PHP так часто требуют чтения и записи на диск и перемещения загруженных пользователем файлов, версия 1.9.0 автоматически создает полностью сконфигурированную корзину при запуске нового проекта.
Эта корзина имеет свободную квоту 5 ГБ, поэтому ваше приложение не нужно оплачивать, и к нему можно получить доступ через имя <app_id>.appspot.com
через протокол gs://
, где app_id
— это идентификатор вашего приложения. , Вы также можете найти это имя в консоли администратора в разделе «Настройки приложения».
Узнайте больше о настройке и использовании здесь .
Исправлена ошибка, из-за которой пустые папки Google Cloud Storage неправильно отображались в консоли разработчика. Новые папки теперь создаются с использованием суффикса «/» вместо «$ folder», чтобы они отображались правильно.
Добавлены API-функции
CloudStorageTools::getMetadata()
иCloudStorageTools::getContentType()
для получения метаданных и типа контента объектов Google Cloud Storage.
Хранимые вами объекты GCS могут также сообщать вам некоторые из своих метаданных через новые API-интерфейсы CloudStorageTools::getMetadata()
и CloudStorageTools::getContentType()
. Чтобы увидеть полную ссылку на API CloudStorageTools
, смотрите здесь .
Исправление PHP_SELF и SCRIPT_NAME
Из-за двух ошибок, 9989 и 10478 , PHP_SELF и SCRIPT_NAME дали неправильный вывод. Теперь это было исправлено.
Если вам интересно, где вы можете их использовать — они чаще всего используются маршрутизацией, автозагрузчиками, реализациями фабричных шаблонов и подобными проектами, где исполняемый скрипт должен знать о своей среде.
Предыдущие версии SDK
Предыдущие версии SDK добавляли поддержку расширений FTP и Zip, исправляли еще некоторые ошибки GCS, позволяли API-интерфейсам сокетов для приложений с поддержкой биллинга, добавляли API-интерфейс CloudStorageTools::getPublicUrl()
для создания URL-адреса для общего доступа к объектам Google Cloud Storage. , и более. Чтобы увидеть полный список, просмотрите список изменений .
Вывод
Поддержка Google в GoogleAppEngine неуклонно растет с момента ее объявления, и она только накаляется. С HHVM на одном фронте, Zephir на другом и PHP-поддержкой на облаке на третьем фронте, похоже, на горизонте назревает высокопродуктивная война, и кто бы ни выиграл, сообщество PHP выиграет. За кого вы голосуете? Используете ли вы GAE для своих приложений PHP? Есть какие-нибудь интересные развертывания, которые вы хотели бы показать нам? Хотите увидеть более продвинутые примеры реализации? Дайте нам знать!