Errors & Troubleshooting
Practical guidance for diagnosing and resolving the most common OJS error conditions.
Why do I get an error when uploading a file?
File upload failures almost always come down to one of three causes:
1. PHP upload limits are too low
OJS file uploads are bounded by PHP configuration. Check and increase these values in your php.ini:
upload_max_filesize = 20M ; Maximum size of a single uploaded file
post_max_size = 25M ; Must be larger than upload_max_filesize
memory_limit = 256M ; Enough memory to process the file
After editing php.ini, restart your web server for the changes to take effect. On shared hosting, you may be able to override these in .htaccess:
php_value upload_max_filesize 20M
php_value post_max_size 25M
2. The files_dir directory is not writable
OJS saves uploaded files to the directory specified in files_dir in config.inc.php. The web server user must have write permission to this directory. See File Permissions for guidance.
3. Image format issues
If you are uploading images (for journal logos, covers, etc.) and getting errors, ensure you are using PNG or JPEG format. GIF support may be absent depending on how PHP's GD extension was compiled. WEBP support also varies by PHP version.
When reporting an upload error, check the PHP error log (error_log path in your php.ini) for a more specific message — it will usually identify whether the failure is a size limit, a permission error, or something else.
I see strange text like ##navigation.journalHelp## on my site — what does it mean?
This notation means OJS is looking for a locale translation key that does not exist in the active language files. The text between ## marks is the key name — OJS displays the raw key as a fallback when no translated string is found.
Common causes:
- A plugin or theme is using a locale key that is not included in its translation file.
- A custom code modification references a key that was removed or renamed in a newer OJS version.
- The active language pack is incomplete or outdated.
To fix it:
Use the Custom Locale Plugin (Plugin Gallery) to supply the missing string:
- Enable the plugin under Settings → Website → Plugins.
- Open the plugin and search for the missing key (e.g.
navigation.journalHelp). - Enter your desired text and save.
This is a non-destructive fix that survives upgrades. If the key is missing from the core OJS locale, consider contributing the translation via PKP's Weblate platform so that others benefit from the fix.
See the Custom Locale Plugin guide for full instructions on locating and overriding locale keys.
Why do characters appear garbled or strange on my site?
Garbled characters (often appearing as é instead of é, or boxes instead of special characters) indicate a character encoding mismatch somewhere in the stack.
OJS uses UTF-8 throughout. Check each layer:
| Layer | What to check |
|---|---|
| Database | Confirm the database and all tables use utf8mb4 charset and utf8mb4_unicode_ci collation |
| PHP | Ensure default_charset = "UTF-8" in php.ini |
| OJS config | connection_charset = utf8 in config.inc.php |
| HTML output | Confirm the theme template includes <meta charset="UTF-8"> in the page head |
The most common culprit is a database table that was created with latin1 encoding, either from an old installation or an import that did not specify UTF-8. Converting a production database's encoding requires careful migration — consult the PKP Admin Guide on character encoding before making changes.
Do not simply change the CHARACTER SET declaration without also converting the data. Changing the charset without re-encoding existing data will corrupt stored content.
How can I prevent spam submissions and fake registrations?
A multi-layered approach is most effective:
- Enable reCAPTCHA — In Administration → Site Settings, configure a Google reCAPTCHA v2 or v3 key. This stops most automated bots at the registration and submission forms.
- Moderate registrations — Set Users & Roles → Site Access Options to require Journal Manager approval for new accounts.
- Enable email validation — OJS can require users to verify their email address before their account becomes active. This catches disposable-email bots.
- Review submission inboxes regularly — Flag and decline obviously spam submissions promptly so they do not accumulate.
- Clean up fake accounts — Use the Merge Users tool to merge fake accounts into a dummy target, effectively disabling them while preserving the audit trail.
The PKP Admin Guide on Managing Spam provides detailed reCAPTCHA setup instructions and additional hardening recommendations.
A fake journal is impersonating my journal — what can I do?
Journal hijacking — where a fraudulent site copies a legitimate journal's identity to solicit article processing fees — is a serious and growing problem. If your journal is being impersonated:
- Document the evidence — Screenshot the fake site, note the domain name, and record the date you discovered it.
- Report to the domain registrar — Use the WHOIS record to find the registrar and file an abuse report, citing trademark infringement or fraud. Many registrars will suspend domains when presented with credible evidence.
- Submit a DMCA takedown to Google — If the fake site is appearing in search results, a DMCA removal request to Google can de-index the fraudulent pages.
- Notify your readership — Post a clear notice on your journal homepage and send an announcement to all registered users warning them of the fake site.
- Report to Retraction Watch — The Hijacked Journals Checker maintains a public list of known hijacked journals. Submit your journal details to be listed, which helps authors avoid the fake site.
- Contact your institution — If your journal is affiliated with a university, involve their legal or communications office.
Do not engage directly with the operators of the fake site. Preserve all evidence and route communications through official channels.
How do I interpret OJS error messages?
OJS error messages typically originate from PHP or the OJS application layer. Here is a quick reference:
| Message pattern | Meaning | Action |
|---|---|---|
PHP Deprecated: ... | A function used by OJS or a plugin is marked deprecated in your PHP version | Usually harmless; check if an OJS or plugin upgrade is available |
xml_parser_create ... not found | PHP xml extension is not installed or not enabled | Enable the xml (libxml) extension in your PHP configuration |
Permission denied: .../files/... | OJS cannot write to the files_dir | Fix directory ownership and permissions (see Installing & Upgrading) |
Parse error: syntax error ... | PHP encountered invalid syntax, often because the PHP version is too old for the OJS code | Upgrade PHP to the minimum required version for your OJS release |
Call to undefined function ... | A required PHP extension is missing | Identify the extension from the function name and enable it |
500 Internal Server Error (no detail) | PHP fatal error with display_errors off | Check the PHP error log for the actual message |
Where to find the PHP error log:
# Common locations
/var/log/apache2/error.log
/var/log/nginx/error.log
/var/log/php_errors.log
# Or check php.ini for the configured path
php -i | grep error_log
During active debugging, temporarily set display_errors = On and error_reporting = E_ALL in php.ini (or in your OJS .htaccess) to see errors inline in the browser. Disable this on production once debugging is complete — detailed error output is a security risk.
Further Reading
- PKP Admin Guide — Troubleshooting — Comprehensive troubleshooting reference
- PKP Admin Guide — Managing Spam — Anti-spam configuration
- Custom Locale Plugin Guide — Fixing missing or incorrect locale strings
- PKP Community Forum — Ask the community for help with unusual errors