php odbc_connect到mssql工作在linux / ubuntu命令行而不是浏览器

时间:2012-09-16 10:25:53

标签: php sql-server linux odbc freetds

我真的觉得我已经对此事进行了详尽的搜索,发现了类似的问题并尝试了许多事情但没有成功,所以我第一次在这里发帖提问:

我做了很多网页/网页编程(主要是PHP / jQuery),并在我的数字图书馆部门的Drupal / Ubuntu Server上托管这些页面。我只是对它们进行编码并通过Dreamweaver发布它们,因为我对Drupal前端没什么用处。我只需要服务器用于我的页面。

无论如何,我想制作一些可以连接到我们的库目录的PHP页面,所以我一直在使用Drupal / Ubuntu服务器的命令行。我安装了unixODBC,遇到了一些麻烦,安装了FreeTDS,设置了驱动程序和DSN。

...最后

  1. 我能够通过tsql连接到我们的目录并运行查询。

  2. 我制作了一个基本的PHP脚本来测试连接:

    • 它来自服务器的Ubuntu命令行(连接成功)。

    • 我在浏览器中加载它时不起作用。我得到了可怕的:

  3.   

    警告:odbc_pconnect():SQL错误:[unixODBC] [驱动程序管理器]未找到数据源名称,并且未指定默认驱动程序,第15行/var/www/mydirectory/mytestpage.php中的SQLConnect中的SQL状态IM002

    更新:我在笔记本电脑的分区中安装了一个测试Ubuntu服务器,在那里我开始干净,安装了Apache2 / PHP5(带有mssql和odbc模块等)/ FreeTDS等。我得到了一个tsql连接。我制作了基本的PHP脚本并从命令行成功运行它。然后我从浏览器导航到php页面并它工作了!我仍然需要在Drupal服务器版本上实现这一点,但现在我至少将问题缩小到了Drupal上的问题服务器

    我搜索并发现了可能的原因:

    1. 文件权限,我认为我已更正,但没有去

    2. 也许我已经设置了用户DNS,而不是系统DNS,我尽力使用正确的“odbcinst”命令选项进行纠正

    3. 也许php需要以CGI模式而不是模块运行。但这似乎不太可能是我读到的。我不确定这会如何影响Drupal。 (我应该在这里进行系统范围的改变是有限制的。)

    4. 许多人说是SElinux阻止Apache在浏览器中显示该页面,但暂时禁用SElinux不起作用。

    5. 感谢您的帮助!

4 个答案:

答案 0 :(得分:0)

我的猜测是它与php有关。 ini档案。在我的Ubuntu系统上,我有2个。 一个在/etc/php5/apache2/php.ini中 在/etc/php5/cgi/php.ini中有一个  需要调整apache2路径中的值以允许连接。不幸的是,除了我使用MySQL和Mongo

之外,我并没有太多使用

答案 1 :(得分:0)

检查您是否在以下位置启用了mssql.so等

/etc/php5/apache2/php.ini,您将在/etc/php5/cli/php.ini上找到另一个

在ubuntu php.ini中的

将单独为cli& mod_php apache配置

答案 2 :(得分:0)

如果您要在命令行上测试您的odbc源代码,我建议您使用isql实用程序而不是tsql。 isql使用您在odbc.ini中定义的DSN连接到数据库,而tsql直接连接到您的数据库。

如果它适用于isql,它也应该适用于您的网页。

同时检查Drupal / Ubuntu服务器文件/etc/odbc.ini(您的DSN源)和/etc/odbcinst.ini(TDS驱动程序设置),看看它们是否与正在运行的Ubuntu安装上的那些匹配。

答案 3 :(得分:0)

import java.util.*; import java.io.*; class Test { public static void main (String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int a[]=new int[10],flag=1; System.out.println("Enter The Nos."); if(br.readLine()!=null) { for(int i=0;i<=9;i++) { String num = br.readLine().replaceAll("\\s+", ""); if(num != null) { a[i]=Integer.parseInt(num); } else { //a[i] = 0; // You might want to assign a[i] to some integer if the input number is null } } int i=0; do{ if(a[i]!=42) System.out.println(a[i]); else{ flag=0;break; } i++; }while(flag==1 && i < 10); } } } 从工作服务器复制到非工作服务器,在启动Web服务器之前添加所需的环境变量,并确保您的网络服务器具有对php.ini和{的完全访问权限{1}}。所以,使用mssql知识库或帮助。