- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有两台相同的服务器(称为测试和生产),Linux Red Hat Enterprise Linux Server 6.2 版(圣地亚哥)、PHP 5.4.2 版、Apache Apache 2.4.2、OpenSSL/0.9.8s、freeTDS 0.92-dev (不是最好的,但我暂时无法更改),以及带有 Microsoft SQL Server 的单独 Windows 服务器。
我有一个名为 testfs1.php 的 PHP 脚本,它从数据库中读取一个始终相同的字符串,并打印出长度:仅此而已。当然,最初的情况要复杂得多,但我尽力简化了。
数据库字段为NVARCHAR,所有组件都设置为使用UTF-8。
通常一切正常:脚本显示预期的字符串长度。但是,每隔几个小时甚至几天,仅在生产服务器(托管几个使用频繁的应用程序)上,错误就会“激活”:Web 服务器开始显示从数据库中错误提取的特殊字符。有时,错误会在几分钟后自行“停用”;上次,持续了几个小时,然后我跑了
service httpd restart
并且错误已停用。
在bug活跃的时间范围内,它是一致的:对页面testfs1.php的web服务器的所有请求都显示错误的结果;然而,当我手动运行时
php testfs1.php
在服务器的命令行上,错误永远不会出现,即使它处于事件状态也是如此。
这是我日以继夜运行的 Bash 脚本,用于监控漏洞的激活情况:
#!/bin/bash
while : ; do
echo -n `date +%H%M%S`
wget https://www.mydomain.org/testfs1.php -o /dev/null
echo -n "("
cat testfs1.php
echo -n ") "
rm testfs1.php
sleep 2
done
我用来重现问题的 PHP 脚本:
<?php
$Conn = mssql_connect( 'PROD', 'user', 'password' ) ;
mssql_select_db( "DBPROD", $Conn ) ;
$Ret = mssql_query( "SELECT lname FROM people WHERE people_key=123", $Conn ) ;
list( $s ) = mssql_fetch_row( $Ret ) ;
print strlen( $s ) ;
?>
这是 freeTDS 使用的 locales.conf:
[default]
date format = %b %e %Y %I:%M:%S:%z%p
language = us_english
charset = UTF-8
[en_US]
date format = %b %e %Y %I:%M:%S:%z%p
language = us_english
charset = UTF-8
[es_ES]
date format = %b %e %Y %I:%M:%S:%z%p
language = us_english
charset = UTF-8
[pt_BR]
date format = %b %e %Y %I:%M:%S:%z%p
language = us_english
charset = UTF-8
[it_IT]
date format = %b %e %Y %I:%M:%S:%z%p
language = us_english
charset = UTF-8
这个问题最令人费解的特殊性的总结:
一位同事暗示这可能是内存问题,考虑到重新启动 Apache 可以释放内存,这在一定程度上是有道理的,并解释了为什么它不会发生在流量最小的测试服务器上。我不相信。
您能想象这种情况的可能原因和解决方案吗?
最佳答案
坦率地说,我不知道是什么导致了这种不一致的工作。但我想建议您将 FreeTDS 和 unixODBC 更改为稳定版本。由于 FreeTDS 缺乏文档和支持。我一直在使用 v0.82。它工作正常。
https://gitorious.org/freetds/mars-freetds/source/52e59affc0110c5ddd379ef1e45c4554123f27b5:README#L2
另一种详细查找问题的方法是在 testfs1.php 中使用 PDO MsSQL。通过这种方式,如果 native mssql 扩展对这种不一致有任何影响,您可以更好地解决问题。
关于php - Apache/PHP/FreeTDS 的特殊字符结果不一致,但命令行中的 PHP/FreeTDS 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20492093/
我试图弄清楚这两个拼图在连接到 Linux 上的 MS-SQL 服务器时如何交互和组合在一起。 据我了解,FreeTDS 是用于与 MS-SQL 对话的协议(protocol)(即一组规则),它是真正
我正在尝试创建我的第一个图像,这是我从其他人那里 fork 出来的,但我遇到了构建失败的问题。看起来错误就在这里 [91mconfigure: error: Cannot find FreeTDS i
我实际上正在尝试通过依赖于 FreeTDS 的模块 pymssql 从 Python 连接到 Azure 上的 MS SQL Server。我只是无法让它发挥作用。我找到了命令行工具 tsql,它应该
我有一个问题,即使我在这些设置中设置为 8.0,FreeTDS 仍然使用 4.2 版进行连接 我可以使用 tsql 进行连接,当我使用 tsql 时,它显示它正在使用 7.1(来自 8.0 的别名),
我有两台相同的服务器(称为测试和生产),Linux Red Hat Enterprise Linux Server 6.2 版(圣地亚哥)、PHP 5.4.2 版、Apache Apache 2.4.
我正在尝试从 Ubuntu 14.04.4 服务器连接到在 Windows 10 上运行的 Pervasive Sql Server。 我正在使用以下服务尝试连接到服务器: FreeTDS unixO
我正在使用安装在 OS X Snow Leopard 上的 FreeTDS 0.82 连接到 SQL Server 2005 数据库。 当我尝试连接 tsql 时,我得到了这个: tsql -S ab
我有一个 C 程序通过 FreeTDS 连接到 MSSQL 数据库. 我正在尝试执行一个 varchar 参数设置为类似“Saída Liberada”的存储过程,但它在 MS SQL 中以奇怪的字符
SQL语句下面 SELECT getdate() go 当我从 SQL Server management studio 运行时,它给出了 "Jul 27 2016 22:00:00.860" 当我从
将应用程序移动到具有更新软件的新服务器后(从 php 5.2.17 -> 5.3.15、FreeTDS 0.64 -> 0.82 移动) SELECT GETDATE() 和任何其他日期时间函数/列产
我们正在为数据库运行带有 Microsoft SQL Server 的 Linux 服务器。除了 FreeTDS 之外,还有什么好的(最好是开源的)c 库可供我们使用吗? 谢谢 最佳答案 不是真的。
我有一个 UBUNTU LAMP 设置。安装了所有必要的扩展 php5-odbcphp5-mssqlFREETDSunixODBC 在 CLI 中,我使用 isql 测试了与数据库的连接。和 tsql
我正在尝试使用 FreeTDS 连接到 MSSQL 2005 服务器。 但我收到“用户登录失败”错误。在 FreeTDS manual 故障排除部分中有一个部分。但它没有提到任何与之相关的可能错误。我
freetds v0.91 - tds 版本不匹配 我想在 Ubuntu 14.04 上使用 FreeBSD 连接到 Windows SQL Server。 FreeTDS 是使用 apt-get 安
我正在迁移一个连接到外部 MSSQL 数据库的 PHP 网站。新服务器是 Linux 服务器。我知道要让它工作,我需要一个适用于 Linux 的 ODBC 驱动程序,如下所示: 免费TDS Micro
我正在使用 FreeTDS 0.91 连接到远程 MSSQL 服务器,但到目前为止所有尝试都没有结果。 在我的 Unix 上执行 tsql 命令时,出现以下错误: locale is "en_US
我决定使用 FreeTDS 驱动程序和 unixODBC 来管理我的基于 LAMP 的应用程序与远程 MsSQL 数据库之间的 PDO 连接。不幸的是,驱动程序似乎没有读取 freetds.conf
我在使用 DBI 和 FreeTDS(在 Ubuntu 上)将一些数据插入 SQL Azure 时遇到了 Perl 的间歇性问题。可能会出现问题,并且忽略了某些行,然后我可以再次运行它而不会出现问题。
我正在寻找分步指南,如何在 Heroku 上安装 freetds。我需要从 ruby 脚本访问 Sql Server,不幸的是,Cedar 不支持开箱即用的 tinytds gem。我已经阅读了互
我在 Centos 7 Linux 机器上尝试通过 pyodbc 连接到 SQL 数据库。我了解到您需要设置 DSN,您可以通过安装 freetds 驱动程序并执行以下操作来实现: import py
我是一名优秀的程序员,十分优秀!