跳转到目录

故障排除

权限,文件访问等#

配置文件权限#

设置适当的文件权限很难规定准确的步骤,因为这很大程度上取决于服务器的操作系统、web服务器和PHP设置。

通常,您希望您的权限设置,使您的web服务器可以读和写(递归)config.inc.phpfiles_dir,并缓存/,公共/.或者,对于添加的特性和降低的安全性,您可以启用写入config.inc.php,插件/也许是去现场. xml文件。您的web服务器应该对包中分发的所有其他文件和目录具有只读访问权限。

首先检查PHP在您的服务器上使用哪个服务器API。如果已经安装了OJS、OMP或OCS,请以“站点管理员”身份登录,单击“系统信息”,在页面底部单击“扩展PHP信息”。找到“服务器API”这一行。根据你使用的API (mod_php/SAPI或CGI/FastCGI),权限应该设置如下。

  • mod_php/SAPI:在这个配置中,系统上的所有PHP脚本通常以相同的用户执行(通常是Apache的“nobody”或“www-data”帐户)。请注意,这在共享主机上可能是不安全的。files_dir(在config.inc. .php中配置)、缓存目录、公共目录以及所有内容和子目录都必须是web服务器用户可写可读的。.php配置文件必须是web服务器用户可读的。
  • CGI/FastCGI:在这种配置中,PHP脚本通常会在你的用户帐户下运行(尽管服务器配置可能会有所不同)。这可能是一个安全的配置。files_dir(在config.inc. .php中配置)、缓存目录、公共目录以及所有内容和子目录必须由该用户帐户可写可读。config.inc. .php配置文件必须由该帐户可读。

Linux如何做到这一点?#

在Linux中,权限基于数字访问控制模式和文件所有权63。理解这个权限方案是必要条件。

例如,所有权apache: www的权限750rwxr-x——)表示apache用户可以读、写和执行;任何人的www组可以读取或执行;文件被保护起来,不让其他人访问。请注意,“execute”对目录和文件来说是完全不同的两个意思!

示例(用于专用主机)#

一般来说,所有权缓存/公共/,和其他网络可写目录应该是你的网络用户和网络用户的主要组,例如apache: www-data.权限应该是750

其他非网络可写目录的所有权应该是你的用户,或者是网络用户组,或者是公共执行权限。例如:

myuser: www-data750

myuser: ourgroup755

网络可写文件也一样,但没有执行许可:

apache: www-data640

非网络可写文件可能是:

myuser: www-data640

myuser: ourgroup644

但是共享主机呢?#

对于一些共享主机(例如,如果你唯一的访问是通过cPanel或类似的基于web的管理工具),你可能没有能力改变文件的所有权,你的网络服务器有效地运行作为你的用户。在这种情况下,您可能仍然有能力保护您的文件,使它们不可由您自己的用户写入(尽管这听起来违反直觉)。在共享主机中,您几乎肯定想要拒绝对文件的全局权限,但要特别注意主机的文档和支持。

安全配置说明#

由于安全配置可能有所不同,而且由于我们收到的关于文件权限的支持请求的数量,我们只能在这些问题上提供有限的帮助。在发布权限问题时,请尽可能具体。

PHP安全模式不是推荐的配置,可能无法正常工作。这是因为在某些配置中,它会导致PHPmkdir ()命令功能创建因文件权限限制而无法读取或写入的目录。这是安全模式的一个限制,可能会阻止你在安全模式环境中使用OJS。

HTML galley不能正确显示/我上传的文件不能正确识别。#

这很可能是由于服务器不正确地将HTML文件识别为其他HTML文件造成的。最快的诊断方法是检查Galley编辑页面:如果你上传了一个HTML文件,而标签字段显示的不是“HTML”(比如“Untitled”),那么该文件没有被正确识别为HTML,很可能无法正确显示。

OJS、OMP和OCS使用三种方法来确定文件类型,顺序如下:

  • PHP的mime_content_type函数,它使用了系统的魔力。Mime文件(此方法已弃用)
  • PHP的finfo_…函数套件(取代mime_content_type作为首选方法)
  • 外部“文件”工具,通过执行以下步骤:

文件-bi [filename here]

以下情况可能会出现问题:

  • 你用的是第一种选择,但你的魔法。Mime文件没有包含您试图识别的文件类型的足够信息;
  • 您的服务器配置不支持前两个选项;
  • 您没有象第三个选项中那样运行外部工具的足够权限。

此外,您可能会遇到由于文件格式不正确而导致的问题。如果您在识别HTML文件方面遇到了困难,您可能需要运行它们html tidy或者确保它们是有效的HTML。由文字处理程序创建的HTML文件可能很难被识别为HTML。

你可能还想搜索论坛对于关键词“magic mime”或“mimetype”,许多用户都遇到过这个问题,并且有一些关于如何解决它的讨论。

我的CSS文件没有被正确识别。#

这可能是上面标识问题的结果,也可能是因为您的css文件在任何实际css之前的第一行包含了注释。尝试删除文件顶部的注释并重新上传。

请注意,当上传主CSS文件的修改副本时,经常会出现这种情况。我们不推荐这种方法——最好上传一个只包含您希望从默认布局修改的样式覆盖的CSS文件,因为主样式表是在任何自定义CSS文件之前应用的。这将有助于避免升级时的样式表问题。

字符编码#

字符编码问题主要出现在两种情况下:当期刊从另一个平台迁移到OJS时;或者(更常见的)当OJS日志从另一个服务器迁移到我们的服务器时。

检查当前的数据库设置以确保您使用的是您认为正在使用的字符集,这通常是有帮助的。一旦登录到MySQL,尝试以下步骤:

显示像'char%'这样的变量;显示像'collation%'这样的变量;

修复字符编码问题的目的是确保存储在数据库中的数据与数据库的字符集设置匹配,也就是说,我们将utf8数据存储在utf8数据库中。一旦这个实现了,我们想要确保OJS的config.inc.php设置匹配数据和db设置,即客户端,连接,数据库字符集设置都设置为utf8在config.inc.php。

字符集和编码导论#

下面的文章将很好地介绍字符集和编码:

一般方法#

  • 检查config.inc.php db设置:客户端、连接、数据库字符集
  • 比较config.inc.php的设置和db中的实际设置,例如。
  • 显示像'char%'这样的变量
  • 显示像'collation%'这样的变量
  • 经常会有不匹配的1。和2。这提供了第一个不匹配线索
  • 生成两个db转储:
  • Mysqldump db——opt——default-character-set=latin1 result-file=latin1.sql
  • Mysqldump db——opt——default-character-set=utf8 result-file=utf8.sql
  • 使用字符编码工具在vim中探索每个转储文件:https://spin.atomicobject.com/2011/06/21/character-encoding-tricks-for-vim/

常见问题#1:使用UTF8数据的Latin1表定义#

在从另一个机构迁移的过程中,你可能会收到一个MySQL转储,其中包括表定义设置为latin1(即CREATE table access_keys…DEFAULT CHARSET=latin1),即使表中保存的实际数据是UTF8。您可以在原始服务器上配置.inc.php来确认是否为这种情况:如果config.inc.php中的client_charset = utf-8,那么数据将以UTF8的形式存储在数据库中。

默认情况下,服务器上的日志被正确配置为在整个数据库和config.inc.php中使用UTF8设置。导入与Latin1表定义和UTF8数据不匹配的数据库将导致OJS中的字符显示问题。

以下转换步骤和导入过程可用于解决这些问题:

转换步骤:

  • 请求一个latin1 mysql转储——默认字符集= latin1——结果文件= dump.latin1.sql中的一个
  • 开放dump.latin.sql在vim中
  • 删除文件顶部的' SET NAMES latin1 '
  • 将latin1表定义替换为utf8表定义: % s / CHARSET = latin1 / CHARSET = utf8 / g中的一个
  • 通过将文件编码设置为utf8:设置fileencoding = utf8
  • 保存文件到一个新的文件名通过: w dump.utf8.sql

导入步骤:

  • 创建一个干净的utf8数据库:CREATE DATABASE import\_ojs DEFAULT CHARSET utf8; / /创建数据库
  • 切换到新的db:使用进口\ _ojs
  • 将所有设置为utf8:设置名字utf8;
  • 导入转换后的转储文件:dump.utf8.sql来源;

等等,用你需要清理的表替换“article_settings”,用需要清理的表中的列替换“setting_value”。

常见问题#2:DUMP文件的双引号编码问题#

在从lib-ojs服务器到sfulib服务器的迁移/升级过程中,MySQL转储文件可能会出现与双引号相关的编码字符问题,例如:“learning,â€<9d>,这应该是“学习”,即使使用正确的UTF8排序从数据库导出。

当用户从使用windows-1252字符集的MS Word中复制和粘贴花哨的/智能引号时,这个问题就会显示出来,它与UTF8中的任何东西都不匹配。这将得到如下序列:“learning,â€<9d>。

以下步骤可用于解决此编码问题:

  • 在本地机器上安装ftfy,因为它是一个python工具,所以也需要安装python3;
  • 编辑命令行ftfy可执行文件cli.py(它可能在不同的路径,取决于你的环境):/usr/local/lib/python3.6/site-packages / ftfy / cli.py
  • 约第100行($ vim +100 cli.py)给fix_file函数添加一个额外的参数' uncurl_quotes=False '。它会像这样:
fix_file(file, encoding=encoding, fix_entities=fix_entities, normalization=normalization, uncurl_quotes=False):
  • 下载DUMP文件到你的本地机器(即:client. org .sql),你将能够运行:美元= client.clean ftfy——输出。sql client.orig.sql

手工解决方案(最后的手段)#

如果您遇到像ââ,—/ ââ,—“/ ââ,—┢/等奇怪的字符,尝试以下SQL命令来搜索并替换它们(从这里获取)博客):

UPDATE article\_settings SET SET \_value = REPLACE(设置\_value, 'ââ, ' Å "', '"');UPDATE article\_settings SET SET \_value = REPLACE(设置\_value, 'ââ,´','"');UPDATE article\_settings SET SET \_value = REPLACE(设置\_value, 'ââ,´â "¢'," ');UPDATE article\_settings SET SET \_value = REPLACE(设置\_value, 'Ãⅷâ, ' Ëœ', '"');UPDATE article\_settings SET SET \_value = REPLACE(设置\_value, 'ââ, ' '','" " ');UPDATE article\_settings SET SET \_value = REPLACE(设置\_value, 'ââ, ' ' ', ' '" "');UPDATE article\_settings SET SET \_value = REPLACE(设置\_value, 'Ãⅷâ, '—');/ /修改文章UPDATE article\_settings SET SET \_value = REPLACE(设置\_value, 'ââ, ' ε ', '" ε ');

如果以上方法都失败了:

Kurt已经运行了以下dump命令并取得了一些成功,但没有解释它到底做了什么:

mysqldump ocs-$USERNAME——opt——default-character-set=latin1——skip-set-charset——single-transaction——ignore-table=ocs-$USERNAME。paper_search_keyword_list——ignore-table商务- $ USERNAME =。paper_search_object_keywords——ignore-table商务- $ USERNAME =。paper_search_objects——结果文件= / tmp / USERNAME.sql美元

错误报告:空白页、诊断等。#

1:检查你的服务器错误日志

通常,这表明发生了PHP错误,消息已经发送到您的web服务器或系统日志文件。检查那里-例如。/var/log/apache/error.log,尽管确切的位置将取决于您的服务器配置—详细信息。

2:检查文件权限

如果您还没有安装OJS、OMP或OCS,那么最有可能的原因是缓存/或缓存/t_compile目录中的文件权限问题。有关文件权限的信息,请参阅文档/README。

3:进一步的故障排除

如果你不能访问你的服务器日志文件,你可以尝试在index.php的顶部添加以下内容,以导致错误消息被发送到浏览器:

报错(display_errors, E_ALL);

如果您碰巧在Windows IIS环境中运行,您可能还必须启用fastcgi.impersonate = 1在你的php.ini文件中。

您可能还想临时修改(大约)文件的第27行lib / pkp /包括/ functions.inc.php,删除@操作符,所以它看起来像这样:

if((include_once BASE_SYS_DIR.'/'.$filePath) === false) {

记得在之后恢复该更改。

有时,软件中包含的特定PHP脚本在没有任何错误信息的情况下无法执行,例如,由于错误的修改或文件权188金宝搏下载app限问题。要确定哪个脚本可能导致问题,您可以编辑lib / pkp /包括/ functions.inc.php找到下面这行:

导入函数(类){

添加以下:

echo“导入”。美元的类。“\ n”;

这将导致OJS、OMP或OCS在导入类文件之前列出它们(对于网站的任何查看器)。如果您有一个特定文件的问题,它将是最后列出的一个。仔细检查它的文件权限,并尝试通过PHP linter (PHP -l path/to/file.inc. PHP)运行它。

完成后,请务必恢复此更改。

什么是堆栈跟踪,我如何显示他们在OxS?#

stacktrace通过显示当前页面的代码显示路由。当显示错误时,stacktrace通常有助于跟踪错误是如何产生的,方法是让开发人员遍历代码并查看他们必须采取何种路径来重现错误。

要在OxS中对错误启用堆栈跟踪,请打开config.inc.php中的' show_stacktrace '选项(靠近文档底部)。stacktrace的示例如下:

数据库错误:Error: invalid input syntax for integer: ""堆栈跟踪:文件:/var/www/ojs/ classes/article/articlegalleydao . incy .php第76行函数:DAO->检索("SELECT COUNT(*) FROM article_galleys WHERE public_galley_id = ?/var/www/ojs/classes/ submit /form/ArticleGalleyForm.inc.php line 233 Function: article legalleydao ->publicGalleyIdExists("pdf", "") File: /var/www/ojs/pages/ sectioneditor / submissiondithandler.com .php line 1459 Function: article legalleyform ->execute("layoutFile") File:/var/www/ojs/pages/ sectioneditor / submissiondithandler .inc.php line 1314 Function: submissiondithandler::uploadGalley("layoutFile") File: /var/www/ojs/pages/ sectioneditor /SectionEditorHandler.inc.php line 469 Function:SectionEditorHandler::uploadLayoutFile(Array(0))文件:/var/www/ojs/index.php第88行函数:call_user_func(Array(2), Array(0))

我收到以下错误:致命错误:允许的内存大小8388608字节耗尽(等)#

您的PHP内存限制很可能设置得太低了。默认情况下,它通常设置为8mb,但是OJS、OMP和OCS至少需要16mb才能正常运行(对于偶尔的任务,如升级,通常需要更多)。你可以找到memory_limit在服务器的配置指令中php . ini配置文件。

完成安装页面后,我收到一个数据库错误。这是怎么呢#

你可能会收到类似的错误

数据库错误:表ojs。期刊的不存在

错误的' ojs '部分是在安装过程中指定的数据库名称。最可能发生的情况是,您试图创建数据库,安装程序试图用必要的数据填充数据库,但由于某种原因无法这样做。可能的原因包括您的数据库系统(例如。MySQL)不允许创建基于web的数据库;或者不允许大规模的表创建。最好的解决办法是:

  • 恢复你的config.inc.php到原件(复制过来)config.TEMPLATE.php会这样做);
  • 通过phpMyAdmin, CPanel或类似的方式手动创建数据库,这取决于你的服务提供商提供了什么;
  • 重新加载root OJS/OMP/OCS页面,重新启动安装过程;
  • 适当地填写所有安装字段,确保为新创建的数据库输入正确的名称;
  • 取消选中“创建新数据库”选项;
  • 点击安装页面最底部的“手动安装”选项。
  • 从结果页面复制数据库查询,并通过phpMyAdmin或类似的方法在数据库上运行。

请注意,当你点击手动安装按钮时,结果页面会说OJS/OMP/OCS安装已经成功完成,但这并不完全正确:你仍然需要复制SQL语句并手动添加到数据库中。

注意:您还可能遇到插件错误。在过去有插件错误,插件试图访问“日志”表之前,安装程序已经创建了表;这些将导致一个“Table”ojs。当有人试图首先加载安装程序页面时,会出现“期刊不存在”的消息。在这种情况下,您可以通过检查堆栈跟踪将其缩小到特定的插件。

PHP和PKP应用程序兼容性#

如果你运行的是PHP 5.3+(这是你应该做的),你需要运行OJS 2.4.0+, OMP 1.0+或OCS 2.3.6+。旧版本的软件不能在新版本的PHP上运行。188金宝搏下载app

如果你运行的是PHP 7+,你需要运行OJS 3.0+。

OJS和OMP 3.1.2+需要PHP 7.1或以上版本。指文档/自述的OJS/OMP版本,了解更多关于PHP系统需求的信息。

请注意:如果你运行的是OJS或OMP在PHP7+ LAMP栈上,请记住更新MySQL驱动参数(数据库部分)config.inc.php文件,例如:

司机= mysqli

Baidu