【问题标题】:New Hosting - Permission problems? [closed]新主机 - 权限问题? [关闭]
【发布时间】:2012-01-21 23:52:19
【问题描述】:

我一直在与其他人共享的测试服务器下开发一个站点。完成所有操作后,我在 NearlyFreeSpeech.net 上托管并切换了名称服务器。我必须更改所有 URL,因为我在测试服务器上有一个特定的文件夹。这一切都是手动完成的,而不是搜索和替换,所以我相当确定一切都是正确的。

但是,我遇到了一系列问题,而且它们似乎都相关。起初,由于权限问题,我无法访问某些文件。我得到了一种 MySQL“权限被拒绝”的错误。我还参考了许多检查某些条件的 PHP 文件(所需的用户名免费、密码是否正确等),出于某种原因,即使代码相同,其中许多文件总是返回相同的“真”假就像我在测试服务器上一样。关闭这些 JS 验证后,我一直在尝试登录/注册,其中许多在服务器端验证中返回了无根据的错误,所以肯定出了问题。

我最终只是在这一切之间的某个时间将每个文件设置为 CHMOD 777,它消除了一些错误。但是,我仍然遇到这些验证错误,并且当它偶尔让我登录时,它不会启动会话。

有什么建议吗?

编辑:

以具体案例为例:

$query = "SELECT * FROM registerusers WHERE username='$username'";
$res = mysql_query($query);

if (mysql_num_rows($res) == 1) {
   $output = false;
} else {
   $output = true;
}
   echo json_encode($output);

这总是返回 1 行。在我的原始脚本中,我使用了if (mysql_num_rows > 0),它运行良好。但是,在这里,该代码不起作用。通过将其更改为==,我可以确定它始终返回 1 并执行该子句。如果用户名存在或不存在,则返回 1。我完全被难住了,真的不明白我怎么会因为改变主机而出现这样的错误。

【问题讨论】:

  • 您是如何传输文件的?我记得当我通过脚本使用 ftp_put 传输文件并且类型为 FTP_ASCII 而不是 FTP_BINARY 时遇到了一些权限问题(尽管在图像上)。
  • MySQL 'permission denied' 更有可能是由于数据库凭据错误 - 首先检查这些凭据。如果您的会话有问题,您可能在开始会话之前向浏览器输出了一些内容。您可能需要先在您的开发机器上调试此问题。
  • 这个问题真的很模糊,但是如果你有与权限相关的Mysql错误,你可能还想检查存储过程/函数/触发器体。当你创建sp时,它会添加definer=[username](即使你没有明确指定),并且旧系统的mysql用户可能不存在新的......我过去在迁移过程中遇到过这样的问题。
  • 另外,使用error_reporting 暂时打开所有错误和警告,以查看您在新服务器上的 php 配置是否导致问题。最后,看看你是否可以在共享服务器上获得权限 644 - 你不想让“世界”访问任何东西。
  • @halfer,如果我只是复制我在测试服务器上拥有的所有权限,那行得通吗?

标签: php mysql validation permissions chmod


【解决方案1】:

尝试使用 mysql_fetch_row() 而不是 mysql_num_rows() 并查看返回的内容。 请更新我们 - 我很好奇!

【讨论】:

    【解决方案2】:

    我将在这里提供一个修复策略,因为从原始帖子和 cmets 来看,可能无法确定问题所在。我处理它的方式假设 Web 应用程序在开发环境中运行良好,并且在以前的服务器上运行良好。验证失败的问题只发生在新服务器上。

    我会在实时环境中添加一些语句,让您看到您的应用程序(或 PHP)正在看到什么。例如,从环境变量中读取的查询字符串值可能必须从新服务器上的不同环境变量中读取。如果是这种情况,那可能是 php.ini 配置异常。

    您可以通过多种方式做到这一点。对我来说,我有时会通过 SSH 登录相关服务器并将文件导入 nano(或任何可用的基于文本的编辑器)。使用这种策略,理想的情况是在服务器上使用您的版本控制进行部署——因此,如果您使用 subversion,您可以简单地执行svn revert file.php,并且您已经一次性删除了您的调试编辑。但是,如果您使用共享主机,这可能对您不可用(我认为您没有说过)。

    如果您在共享主机上,您可以添加条件调试语句,具体取决于您的主根目录中是否存在文件。如果此文件存在,则激活公共调试(print_r() vars 到屏幕然后退出)或私有调试(将内容转储到服务器文件,以便可以将它们通过 FTP 传回给您进行分析)。我会在您的开发机器上执行此操作,确保它正常工作,将其提交给版本控制,以您通常的方式发送,然后在您确定它已修复后从当前版本中删除。

    附录:另外,正如我在 cmets 中所说,暂时打开错误/警告报告。这可能会揭示一个事后看来显而易见的问题。

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 2016-07-29
      • 1970-01-01
      • 2010-10-27
      • 2011-09-17
      • 2012-02-03
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多