[nycphp-talk] Google App Engine best practices links?
Gary A. Mort
garyamort at gmail.com
Thu Dec 5 20:32:06 EST 2013
I was wondering if there are any best practice web sites on using PHP on
Google App Engine.
While working through installing the Joomla! CMS on GAE I've run into
some weird oddities and initially have taken a rather brute force
approach to work through them.
Being unhappy with the brute force method[which requires modifying core
files in the open source code in order to accommodate GAE] I have
continued to cycle on it in the back burner and am trying an alternate
approach right now.
Specifically, in Joomla there are 3 main entree points to an application:
http://mydomain.com/index.php
http://mydomain.com/administrator/index.php
http://mydomain.com/installation/index.php
So far I've run into 2 issues:
1) Joomla uses XML files in order to define html form's. PHP is used to
parse those files and then build the forms. GAE disables the ability to
load /remote/ XML files in PHP by default. It is possible to allow this
by add libxml_disable_entity_loader to the list of enabled functions and
then to call libxml_disable_entity_loader(false); at some point in the
code. For some reason, despite the fact that these are LOCAL xml files
Jooma attempts to read, I still need to use this fix to allow Joomla to
read the local files.
2) Joomla defaults to saving sessions in files, GAE defaults to saving
sessions in memcache. Attempt to save session files using the default
save_path does not work since the path does not exist. Making a small
hack to make memcache the default does not work because Joomla checks
for the existence of the Memcache extension[via extension_loaded()]
which does not exist in GAE. A slightly more involved solution
required me adding a new GaeMemcache class to override that check, and
modifying a core class to force it to enable GaeMemcache.
None of this is bad...it's just inelegant and messy.
It strikes me that this was the wrong way to go about it. Because of
the way GAE is configured through app.yaml to match URI patterns to
individual php files - instead of changing the core code, I can instead
provide a pre-loader to process the file.
So my new file structure will be as follows:
/gae/joomla-site.php
/gae/joomla-install.php
/gae/joomla-admin.php
/gae/lib/gaememcache.php
/gae/appl.yaml
/joomla-cms : submodule git repository pointer for the Joomla-CMS repository
With this layout, I can now define my 3 entree points so that instead of
loading the various index.php files directly, I can proxy the call first
by the /gae/joomla* php file. That gives me the ability to make any
Google App Engine modifications needed[defining a special memcache
handler for GAE, making my libxml_disable_entity_loader function call -
etc. No core hacks needed - now I can just setup a special
pre-processors to handle everything.
The configuration ability of GAE is extremely fascinating.. In many
ways it is overly cumbersome for simply usage due to the options
available - but the options also allow for neat little workarounds[I
also realized that instead of hacking the core file, I could have made a
copy of the core file under my gae directory and used the upload path
overrides to overwrite the core files only when uploaded/deployed to GAE]
What I am somewhat curious about is if there are any best practices
tutorials out there since this sort of situation seems like it should be
common, and the various answers are intuitive once you start groking the
GAE deployment system.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nyphp.org/pipermail/talk/attachments/20131205/1960d161/attachment.html>
More information about the talk
mailing list