我一直在测试服务器下开发一个网站,我与其他人分享。一旦我完成了所有事情,我就在NearlyFreeSpeech.net上主持并切换了名称服务器。我必须更改所有URL,因为我在测试服务器上有一个特定的文件夹。我是手工完成而不是搜索和替换,所以我很确定一切都是正确的。
但是,我遇到了一系列问题而且看起来都很相关。起初,由于权限问题,我无法访问某些文件。我得到了一种MySQL“权限被拒绝”的错误。我还提到了许多检查某些条件的PHP文件(所需的用户名免费,密码是否正确等),并且由于某些原因,即使代码相同,其中许多也始终返回相同的“true”false。就像我在测试服务器上一样。在关闭那些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。我绝对难过,无法真正看到如何通过改变托管来获得这样的错误。
答案 0 :(得分:1)
尝试使用mysql_fetch_row()而不是mysql_num_rows()并查看返回的内容。 请更新我们 - 我很好奇!
答案 1 :(得分:0)
我会在这里提供一个修复策略,因为从原始帖子和评论来看,可能无法确定问题是什么。我将解决它的方式假设Web应用程序在开发环境中正常工作,并且在以前的服务器上运行良好。验证失败的问题只发生在新服务器上。
我会在实时环境中添加语句,让您看到您的应用程序(或PHP)所看到的内容。例如,可能必须从新服务器上的不同env var读取从环境变量读取的查询字符串值。如果是这种情况,那可能会指向一个不寻常的php.ini配置。
您可以通过多种方式完成此操作。对我来说,我有时会通过SSH登录到有问题的服务器并将文件带入nano(或任何基于文本的编辑器)。使用此策略,理想情况是在服务器上使用您的版本控制进行部署 - 因此,如果您使用subversion,您只需执行svn revert file.php
并且您已经一次性删除了调试编辑。但是,如果您使用共享主机(我不认为您已经说过),则可能无法使用此功能。
如果您使用共享主机,则可以添加条件调试语句,具体取决于您的主目录中是否存在文件。如果此文件存在,则激活公共调试(print_r()
vars to screen然后退出)或私有调试(将内容转储到服务器文件,以便将它们FTP返回给您进行分析)。我会在您的开发机器上执行此操作,确保它正常工作,将其提交到版本控制,以您通常的方式发送,然后在您确定已修复后从当前版本中删除。
附录:另外,正如我在评论中所述,暂时打开错误/警告报告。这可能会揭示一个事后看来很明显的问题。