--- /dev/null
+<refentry id="{@id}">
+ <refnamediv>
+ <refname>Frequently Asked Questions (FAQ)</refname>
+ <refpurpose>Quick answers to common questions</refpurpose>
+ </refnamediv>
+ <refsynopsisdiv>
+ <authorblurb>
+ <para>
+ <author>
+ <firstname>Martin</firstname>
+ <surname>Geisler</surname>
+ </author>
+ {@link mailto:mgeisler@users.sourceforge.net
+ mgeisler@users.sourceforge.net}
+ </para>
+ </authorblurb>
+ </refsynopsisdiv>
+
+ {@toc}
+
+<refsect1 id="{@id pel-acronym}">
+
+ <title>What does PEL stand for?</title>
+
+ <para>PEL is an acronym for "PHP Exif Library". Sound simple
+ enough, doesn't it?</para>
+
+ <para>But did you realise that PEL is an acronym consisting of two
+ acronyms, one of which is recursive! So "PEL" actually stands for
+ "PHP Hypertext Preprocessor Exchangeable image file format Library".
+ Pyh!</para>
+</refsect1>
+
+
+<refsect1 id="{@id exif-vs-exif}">
+
+ <title>What's the business with EXIF vs. Exif?</title>
+
+ <para>Well, since Exif is an acronym for "Exchangeable image file
+ format" and thus you would expect it to be spelled "EXIF", just like
+ "JPEG" which is an acronym for Joint Photographic Experts
+ Group.</para>
+
+ <para>But the Exif standards spell Exif as "Exif" and so does PEL,
+ at least since version 0.9. But should they ever decide to update
+ their acronym to "EXIF" then PEL will revert... Luckily it does not
+ affect the acronym PEL itself :-)</para>
+
+</refsect1>
+
+
+<refsect1 id="{@id why-php5}">
+ <title>Why does PEL require PHP version 5?</title>
+
+ <para>The support for object-oriented programming was completely
+ overhauled with the introduction of PHP 5 in July 2004. The changes
+ included both semantic changes and syntaxtical changes to the PHP
+ language.</para>
+
+ <para>The semantic change was the use of object references per
+ default. This change means that when you do</para>
+
+ <programlisting role="php">
+ <![CDATA[
+$object_a = $ifd->getEntry(PelTag::IMAGE_DESCRIPTION);
+$object_a->setValue('This is my new description.');
+$object_b = $ifd->getEntry(PelTag::IMAGE_DESCRIPTION);
+ ]]>
+ </programlisting>
+
+ <para>then <literal>$object_a</literal> and
+ <literal>$object_b</literal> will both reference <emphasis>the
+ same</emphasis> element. In particular, you will see that
+ <literal>$object_b->getValue()</literal> returns the string just
+ stored in <literal>$object_a</literal> (since they are the same
+ object). With PHP 4 you would have gotten two different objects,
+ which is generally not what you want.</para>
+
+ <para>The syntaxtical changes from PHP 5 to PHP 4 include the
+ addition of access modifiers to object fields (the private,
+ protected, and public keywords), object constants, constructors
+ named <literal>__construct()</literal>, interfaces and abstract
+ classes, and exceptions. PEL uses all these new features to the
+ fullest, which means that PHP 4 doesn't understand the code.</para>
+
+ <para>If your provider is still using PHP 4, then you should ask
+ them to upgrade. PHP 5 has been declared stable since July 2004 and
+ all major PHP applications ({@link http://www.wordpress.org
+ WordPress}, {@link http://gallery.menalto.com/ Gallery},
+ {@link http://phpwiki.sourceforge.net/ PhpWiki},
+ {@link http://www.phpmyadmin.net/ phpMyAdmin}, etc...), have been
+ upgraded to work with PHP 5, so an upgrade should not bring you any
+ problems, just more features and better performance.</para>
+
+</refsect1>
+
+
+<refsect1 id="{@id fatal-php4-errors}">
+
+ <title>Why do I get fatal errors from PHP?</title>
+
+ <para>If you get a fatal error when trying to use PEL, then your
+ installation of PHP might be too old. PEL requires PHP version 5.
+ Please see the question "{@tutorial faq.pkg#why-php5}" for more
+ information.</para>
+
+</refsect1>
+
+
+<refsect1 id="{@id call-on-non-object}">
+ <title>What does "<literal>Call to a member function
+ <function>f</function> on a non-object</literal>" (where
+ <function>f</function> is <literal>getTiff()</literal> or
+ <literal>setValue()</literal>) mean?</title>
+
+ <para>This is the error PHP gives when you call a method on a
+ variable which is not an object.</para>
+
+ <para>PEL uses objects to represent the entire structure of a JPEG
+ image, and many of the methods defined on those objects return other
+ objects. In particular, the method {@link PelJpeg::getExif()}
+ returns a {@link PelExif} object and {@link PelIfd::getEntry()}
+ returns a {@link PelEntry} object.</para>
+
+ <para>But both methods can return <literal>null</literal> if no such
+ section or entry exist. The correct way to use them is thus
+ something along the lines of:</para>
+
+ <programlisting role="php">
+ <![CDATA[
+$exif = $jpeg->getExif();
+if ($exif != null) {
+ $tiff = $exif->getTiff();
+ /* Do something with the TIFF data. */
+} else {
+ /* Sorry --- no Exif data found. */
+}
+ ]]>
+ </programlisting>
+
+ <para>The same principle applies to the return values of
+ {@link PelIfd::getEntry()} and all other methods which return
+ objects.</para>
+
+</refsect1>
+
+
+<refsect1 id="{@id IPTC-entries}">
+
+ <title>Does PEL handle IPTC entries?</title>
+
+ <para>No, PEL only deals with Exif data, and no such extension is
+ planned. Try taking at look at the
+ {@link http://www.ozhiker.com/electronics/pjmt/ PHP JPEG Metadata
+ Toolkit} which should handle IPTC along with a huge number of other
+ metadata formats.</para>
+
+</refsect1>
+
+
+<refsect1 id="{@id missing-Gettext}">
+
+ <title>Why does Gettext not work?</title>
+
+ <para>PEL uses Gettext for localization, and thus your system must
+ fulfill a few requirements:</para>
+
+ <orderedlist>
+
+ <listitem>
+ <para>PHP must have support for the
+ {@link http://www.php.net/manual/en/ref.gettext.php Gettext
+ extension}. Most installations of PHP already has this, but
+ please double-check with <function>
+ {@link http://www.php.net/manual/en/function.phpinfo.php
+ phpinfo}</function> before asking for help on the
+ mailinglist.</para>
+ </listitem>
+
+ <listitem>
+ <para>The system must be setup to generate locales for the
+ languages into which PEL has been translated. Again, most
+ commercial webhosts would have their systems configured to deal
+ with all locales, but if you're installing PEL on your own
+ server you'll probably have to reconfigure it.</para>
+
+ <para>How to configure the locales differ from system to system.
+ With the {@link http://www.debian.net/ Debian GNU/Linux}
+ distribution you should run</para>
+
+ <programlisting>
+ dpkg-reconfigure locales
+ </programlisting>
+
+ <para>and then select all locales that you want your system to
+ support.</para>
+
+ <para>Restart your webserver after changing the locale setup to
+ make the changes effective.</para>
+
+ </listitem>
+
+ </orderedlist>
+
+</refsect1>
+
+
+<refsect1 id="{@id error-handling}">
+
+ <title>How to deal with broken images?</title>
+
+ <para>By default PEL will try to load as much from an image as
+ possible and continue dispite any errors found. The Exif standard
+ mandates certain formats and lengths for some entries, and sometimes
+ these requirements are violated.</para>
+
+ <para>The strictness of PEL is controlled by the the method
+ {@link Pel::setStrictParsing()}. The default is non-strict parsing.
+ In this mode, PEL will not throw exceptions for parse errors but
+ instead store them for later inspection via the
+ {@link Pel::getExceptions()} method.</para>
+
+ <para>With an argument of <literal>true</literal> to
+ {@link Pel::setStrictParsing()} you make PEL throw exceptions upon
+ parse errors.</para>
+
+ <para>This may all sound very complex, but it is actually fairly
+ simple for most uses: have PEL load your images in non-strict mode
+ and check for errors afterwards, if necessary.</para>
+
+ <para>Please note that even if PEL is in non-strict mode it might
+ throw exceptions while parsing an image, for example if the image
+ cannot be recognized a JPEG or TIFF image. So it is always
+ necessary to wrap calls to PEL in a try-catch block.</para>
+
+</refsect1>
+
+
+<refsect1 id="{@id commercial-use}">
+
+ <title>Can I use PEL for a commercial application?</title>
+
+ <para>Yes, no problem as long as you do not distribute your
+ application under another license than the GNU GPL.</para>
+
+ <para>As you should know, PEL is licensed to you under the
+ conditions of the GNU GPL. The license deals
+ <emphasis>only</emphasis> with the distribution of PEL and any
+ derivative works based on PEL, the license has nothing to say over
+ how you may use PEL.</para>
+
+ <para>So if you do not distribute your code, then you can use it for
+ whatever you want, including writing a website (commercial or not)
+ that integrates PEL. Please see
+ {@link http://www.gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
+ this question} in the GPL FAQ.</para>
+
+</refsect1>
+
+
+<refsect1 id="{@id unanswered-question}">
+
+ <title>My question is not answered here!</title>
+
+ <para>Please ask your questions on the
+ {@link http://lists.sourceforge.net/lists/listinfo/pel-devel PEL
+ Development List}. If an answer is found, then the FAQ will be
+ updated.</para>
+
+</refsect1>
+
+
+</refentry>