ionCube Logo

Frequently Asked Questions

Loaders

Installing Loaders is easy when done correctly, and on most servers an installation will work without a problem. However there is no such thing as a "standard PHP installation", and servers can be setup in many different ways, and with different features enabled or disabled.

If you have problems running scripts and installing Loaders, here are explanations for the most likely symptoms that you may see.

If you are on a shared server, please make sure that you have run the ioncube-loader-helper.php script, and clicked the link to test runtime installation. Unless the server configuration has disabled the display of errors, you are likely to see a message that you will find explained here.

I visited a website and it said that I needed to install Loaders. Why, and how do I do this?
I am trying to install a PHP product and it is asking for Loaders. What do I do?
Where can I find Loaders?
How can I install Loaders?
How can I tell if a Loader is already installed?
I checked your Loaders page and cannot find Loaders for (e.g.) RedHat Linux. Do you support it?
Which Loader package do I need?
I need Loaders that I can't find on your Loaders page. Can I get these?
What does dl() [function.dl]: Temporary module name should contain only filename mean?
What does dl() [function.dl]: Dynamically loaded extentions aren't enabled in... mean?
What does dl() has been disabled for security reasons mean?
What does ELF file data encoding not little-endian mean?
What does wrong ELF class: ELFCLASS32 mean?
What does wrong ELF class: ELFCLASS64 mean?
What does unsupported file layout mean?
What does failed to map segment from shared object: Permission denied mean?
What does undefined symbol: compiler_globals mean?
What does undefined symbol: zend_hash_destroy mean?
I see cannot open shared object file: No such file or directory but I know that the Loader exists. Why?
The file ... cannot be decoded by this version of the ionCube Loader. Why?
I get a corrupted file message. Why?
I updated the php.ini file and the Loader still does not work. Why?
I get an error saying that ap_php_vsnprintf is undefined. Why?
I get an error saying that empty_string is undefined. Why?
The Loader helper script says that the Loader could not be installed, but does not say why or give any error. Why?
I had a problem, updated Loaders, and have the same problem as before. Why?


Q. I visited a website and it said that I needed to install Loaders. Why, and how do I do this?

A. This means that the website is not setup correctly. If this is not your own website you can ignore the message, and you do not need to install anything on your computer. If you are the site administrator, your site requires Loaders to be installed in order to run some of the files.

Q. I am trying to install a PHP product and it is asking for Loaders. What do I do?
A. The provider of the scripts should be able to assist as part of your support contract with them, so you should contact them for assistance with this. Installing Loaders is generally easy though, and the following two items in this FAQ should help. Your PHP scripts may have come with Loaders and the ioncube-loader-helper.php script, but if not, or you continue to get problems you should update to the latest Loaders from our site because script providers do not always keep up to date with Loader releases.

Q. Where can I find Loaders?
A. Loaders for common operating systems and architectures can be found on our Loaders page.

Q. How can I install Loaders?
A. The Loaders are easy to install, although occasionally a PHP system may not be setup correctly and require adjustment. The Loaders come with documentation and also a helper script called ioncube-loader-helper.php that you can run to help you with installation. We also have online documentation. If you have access to the php.ini file, installing the Loader there is recommended as it gives the best performance. If you are on a shared host, try the runtime install method as this will often work and not need you to contact the host. If you encounter problems it may be necessary to ask the host to install the Loader for you, but check this FAQ again as a problem may just be a correctable user error.

Q. How can I tell if a Loader is already installed?
A. If a Loader is already installed in the php.ini file, it will show up near the start of phpinfo output in the box that mentions the PHP engine. If a Loader is installed in the php.ini file, it is not possible to override it locally with runtime install, and so if you need to update a Loader that is already installed, the system administrator with access to the php.ini file must do this.

Q. I checked your Loaders page and cannot find Loaders for (e.g.) RedHat Linux. Do you support it?
A. Most likely yes. RedHat, Debian, Mandrake, SuSE are just some of the many distributions of the same Linux operating system. The ionCube Loaders are dependent on the operating system (e.g. Linux) and processor type, (e.g. x86), but not any particular distribution. If you download Loaders for the correct processor, e.g. x86 (32 bit), x86_64 (64 bit), or ppc (power PC), the Loaders should work.

Q. Which Loader package do I need?
A. This depends on the operating system and architecture (processor type) of the machine running the Loaders. e.g. Linux 32 bit (x86), Linux 64 bit (x86_64), Windows, OS X ppc (power pc), OS X x86 (Intel) etc, If you are unsure, the system administrator or hosting provider will be able to tell you, and the System line at the top of a phpinfo page will give information about this (see examples).

Q. I need Loaders that I can't find on your Loaders page. Can I get these?
A. We have Loaders for common platforms, but if you cannot find Loaders for your system please contact us via the helpdesk and we may be able to assist.

Q. What does dl() [function.dl]: Temporary module name should contain only filename mean?
A. This is because the server uses PHP 5.2.5 or higher, and the Loader must be installed in the php.ini file in this case. Your hosting provider should be able to do this for you, but it may also be possible for you to use a custom php.ini file to install the Loader yourself.

First view a phpinfo page for the server and see if the entry for Server API says CGI. If it does then PHP may read configuration instructions from a php.ini file that it finds in the same location as the first PHP script processed on each request. To test this, create a file called php.ini in the same location as the phpinfo page and refresh the phpinfo(). If the file used as the configuration file is now listed as the file that you created, it is possible to use a custom php.ini file. You should then add a line to the php.ini file that says

zend_extension = /path/to/ioncube_loader_lin_5.2.so

Replace /path/to with the full path to where the Loader is located on the system, and if the server uses PHP 5.3, 5.4 etc., replace 5.2 with the correct number for the PHP version used. Lastly replicate the php.ini file in each location where scripts are located that are accessed directly by the browser.


Q. What does dl() [function.dl]: Dynamically loaded extentions aren't enabled in... mean?
A. This means that a PHP feature called dl() is not enabled, and the Loader must be installed by the hosting provider. Many hosts choose to install the Loader themselves rather than use dl(), and the host should have no problems in doing this. Naturally we can advise them if they need any assistance.

Q. What does dl() has been disabled for security reasons mean?
A. This means that a feature called dl() has been disabled on your server, and Loaders can only be installed by editing the php.ini file. If you have administrator access to the server then you could install the Loader in the php.ini file yourself, and if you are on a shared server, contact the support desk of your server provider to ask them to do this for you.

Q. What does ELF file data encoding not little-endian mean?
A. This means that the Loaders are not the correct ones for your operating system or architecture. Little endian platforms are usually x86 or x86_64, so perhaps you have the ppc or sparc Loaders by mistake. Check your operating system type and architecture, and reinstall the correct Loaders for your system.

Q. What does wrong ELF class: ELFCLASS32 mean?
A. This means that the Loaders are 32 bit (e.g. Linux x86) but the processor is 64 bit (e.g. Linux x86_64). Install the correct Loaders for the target system.

Q. What does wrong ELF class: ELFCLASS64 mean?
A. This means that the Loaders are 64 bit (e.g. Linux x86-64) but the processor is 32 bit (e.g. Linux x86). Install the correct Loaders for the target system.

Q. What does unsupported file layout mean?
A. This means that the Loaders are not the correct ones for your operating system or architecture. e.g. you may have the AMD64 FreeBSD 6 Loader when you need the x86 FreeBSD 4 Loader.

Q. What does failed to map segment from shared object: Permission denied mean?
A. This is a permissions error with the operating system. If you have access to the command line on the target server, run the command
  restorecon *.so
in the Loaders folder and restart the web server software. If this does not resolve the issue, other commands to try are:
  chcon -t shlib_t *.so
or
  chcon -t texrel_shlib_t *.so

If you are on a shared host without full access to the system, ask the hosting company to do this for you.


Q. What does undefined symbol: compiler_globals mean?
A. This can mean that PHP is built with "Thread Safety" enabled. Check a phpinfo page to verify, and if thread safety is enabled you should rename the thread safe Loader to the name of the non-thread safe Loader. So, if you are using PHP x.y.z on Linux, you should rename ioncube_loader_lin_x.y_ts.so Loader as ioncube_loader_lin_x.y.so in the ioncube directory. There will already be a non-ts Loader with that name, and it is best to remove that before renaming the ts version.

If you built PHP yourself, note that having threading enabled on Unix is usually unrequired and an error, and the --enable-experimental-zts configuration option should only be used if you know what it does and why you need it, and not just because it sounds good!


Q. What does undefined symbol: zend_hash_destroy mean?
A. This can occur if PHP is configured with the option
  --enable-versioning
This option can prevent the export of global PHP API symbols, causing failure when attempting to link libraries such as the Loader or Zend Optimiser. PHP must be rebuilt without that option so that the PHP API is correctly visible. A phpinfo page should show at the top of the page what options were used to configure PHP, and should confirm that the option had been used.

Q. I see cannot open shared object file: No such file or directory but I know that the Loader exists. Why?
A. First double check that the Loader really is in the location being tried. If it is then the error means that the Loader shared library is not in the correct format for your operating system or architecture. Often this is because the x86_64 64 bit Loaders are installed on a 32 bit system, or the x86 32 bit Loaders are installed on a 64 bit system. Check your operating system type and architecture, (see examples), and reinstall the correct Loaders for your system.

Q. The file ... cannot be decoded by this version of the ionCube Loader. Why?
A. This is because there is an older version of the Loader installed that cannot process a newer type of encoded file. If you have runtime install of Loaders from an ioncube folder in part of your application, you should download updated Loaders and update the Loaders in the ioncube folder. If Loaders are installed in the php.ini file, update the Loader there if you have access to the file, or ask the system administrator or hosting provider to update their Loaders. If you update Loaders in the ioncube folder and still have the problem, it is likely that Loaders are already installed via the php.ini file and must be updated there in the manner just mentioned.

Q. I get a corrupted file message. Why?
A. The file may really be corrupted, or there may be an old Loader installed that does not recognise the type of encoded file that you have. You can check whether the Loader is already installed by using a phpinfo script, and if a version 2 Loader is installed, e.g. 2.5, then that should be updated to the latest Loader. Corrupted files are rare, but can occur to some types of encoded files if they are uploaded using an FTP program in ASCII mode instead of binary, or if the TAR smart cr/lf conversion feature is enabled in WinZIP. If updating Loaders does not resolve the problem, try reinstalling the PHP script making sure to transfer in binary.

Q. I updated the php.ini file and the Loader still does not work. Why?
A. There are several things to check.

General Points

Installing on Windows


Q. I get an error saying that ap_php_vsnprintf is undefined. Why?
A. This is because you are using PHP 5 before 5.0.3. The very first versions of PHP 5 had many problems, and we support PHP 5.0.3 onwards. You should upgrade to PHP 5.0.3 or later.

Q. I get an error saying that empty_string is undefined. Why?
A. This is because you are using PHP 5.1 but have a Loader for an earlier version of PHP. Check your php.ini file carefully!

Q. The Loader helper script says that the Loader could not be installed, but does not say why or give any error. Why?
A. The PHP configuration may have suppressed errors, but this does mean that the machine configuration does not support runtime installation of the Loaders. Ask the system administrator or hosting provider to install the Loader in the php.ini file for you.

Q. I had a problem, updated Loaders, and have the same problem as before. Why?
A. If the problem is with runtime install of Loaders, the server may have Loaders installed in the php.ini file, and these cannot be overridden by runtime install of Loaders. The Loader should be updated in the php.ini file.