Статьи

GoogleAppEngine 1.9.0. — Обновления PHP

Прошло много времени с тех пор, как я опубликовал свою статью «Начало работы с 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? Есть какие-нибудь интересные развертывания, которые вы хотели бы показать нам? Хотите увидеть более продвинутые примеры реализации? Дайте нам знать!