让PHP以ROOT权限执行系统命令的方法

原文地址:http://www.jb51.net/article/26232.htm

用来作为解决php以root权限执行一些普通用户不能执行的命令或应用的参考。
其实php里的popen()函数是可以解决这个问题的,但是由于某些版本的linux(如我使用的Centos 5)对系统安全的考虑,
使得这个问题解决起来麻烦了好多。先来看一个网友使用popen()函数的例子。

复制代码代码如下:
/* PHP中如何增加一个系统用户
下面是一段例程,增加一个名字为james的用户,
root密码是 louis。仅供参考
*/
$sucommand = “su root –command”;
$useradd = “/scripts/demo/runscripts.php”;
$rootpasswd = “louis”;
$user = “james”;
$user_add = sprintf(“%s %s”,$sucommand,$useradd);
$fp = @popen($user_add,”w”);
@fputs($fp,$rootpasswd);
@pclose($fp);

经过自己的测试,证实此段代码是不能实现(至少在我的系统里是这样的)作者想要获得的结果的。经过自己很长时间的google之后,
问题的关键是su root这个命令需要的密码必须以终端的方式输入,不能通过其它的方式(我也不知道还有没有其它的方式)获得。
又由于项目要求不能使用类似于sudo这种应用,无奈之下,我选择了网友提出的用编写C程序的方法来解决此问题。
首先写个C程序,命名为:run.c 放在目录/scripts/demo/下

复制代码代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
uid_t uid ,euid;
//char cmd[1024]; //变量暂时未使用
uid = getuid() ;
euid = geteuid();
printf(“my uid :%u\n”,getuid()); //这里显示的是当前的uid 可以注释掉.
printf(“my euid :%u\n”,geteuid()); //这里显示的是当前的euid
if(setreuid(euid, uid)) //交换这两个id
perror(“setreuid”);
printf(“after setreuid uid :%u\n”,getuid());
printf(“afer sertreuid euid :%u\n”,geteuid());
system(“/scripts/demo/runscripts.php”); //执行脚本
return 0;
}

编译该文件:
gcc -o run -Wall run.c
在该路径下生成run文件,这个可执行文件。如果现在用PHP脚本调用 该run的话,即使setreuid了 也是不行的。
接下来要做的是:给run赋予suid权限
# chmod u+s run
# ls
# -rwsr-xr-x 1 root root 5382 Jul 2 21:45 run
好了,已经设置上了,再写一个php页面调用它。

复制代码代码如下:
<?php
echo ‘<pre>’;
$last_line = system(‘/scripts/demo/run’, $retval);
echo ‘
</pre>
<hr />Last line of the output: ‘ . $last_line . ‘
<hr />Return value: ‘ . $retval;
?>

在浏览器中浏览。
my uid :48
my euid :0
after setreuid uid :0
afer sertreuid euid :48

——————————————————————————–
Last line of the output: afer sertreuid euid :48
——————————————————————————–
Return value: 0
该命令执行成功。
从显示结果可以看出: apache(daemon)的uid 为48(事实上很多linux系统下daemon的uid为2)。
调用setreuid后将有效用户id和实际用户id互换了。(必须在chmod u+s生效的情况下) 使apache当前的uid为0这样就能执行root命令了。
只需要更改 C文件中的system所要执行的命令就可以实现自己的PHP以root角色执行命令了。

在玩C 以前 玩过一段时间的PHP, 哪个时候需要用PHP 来运行root命令,一直未果,直到有一天搜索到了super这个插件.
随着玩C的日子多了.发现可以用C语言来包裹 要运行的外部命令. 实验了一下.成功了.
不需要任何外部工具就可以实现用PHP 执行root命令.
我下面就把方法发布给大家,有需求用php来运行root命令的朋友可以不用发愁了.
平台:Linux. 实验命令iptables 当前的目录是/var/www/html/http
写程序的时候 用root用户
大家都知道iptables 非root用户不能运行.
首先写个C程序
命名为:ipt.c

复制代码代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
uid_t uid ,euid;
uid = getuid() ;
euid = geteuid();
printf(“my uid :%u\n”,getuid()); //这里显示的是当前的uid 可以注释掉.
printf(“my euid :%u\n”,geteuid()); //这里显示的是当前的euid
if(setreuid(euid, uid)) //交换这两个id
perror(“setreuid”);
printf(“after setreuid uid :%u\n”,getuid());
printf(“afer sertreuid euid :%u\n”,geteuid());
system(“/sbin/iptables -L”); //执行iptables -L命令
return 0;
}

编译该文件 gcc -o ipt -Wall ipt.c
在该路径下生成ipt 这个可执行文件.
如果现在用PHP网页调用 该ipt的话,即使setreuid了 也是不行的.
接下来要做的是chmod u+s ./ipt
ls 一下
-rwsr-xr-x 1 root root 5382 Jul 2 21:45 ipt
s位已经设置上了.
再写一个php页面调用它.

复制代码代码如下:
<?php
echo ‘<pre>’;
$last_line = system(‘/var/www/html/http/ipt’, $retval);
echo ‘
</pre>
<hr />Last line of the output: ‘ . $last_line . ‘
<hr />Return value: ‘ . $retval;
?>

在浏览器中浏览.

[color=Red]Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all — anywhere anywhere state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination [/color]
[color=Blue]my uid :48
my euid :0
after setreuid uid :0
afer sertreuid euid :48[/color]

——————————————————————————–
Last line of the output: afer sertreuid euid :48
——————————————————————————–
Return value: 0

该命令执行成功..
众所周知: apache的uid 为48. 调用setreuid后 将有效用户id 和实际用户id互换了.(必须在chmod u+s生效的情况下) 使apache当前的 uid为0 这样就能执行root命令了。

大家只需要更改 C文件中的 system所要执行的命令就可以实现自己的PHP执行root命令了.

Linux下PHP开启Oracle支持(oci8)(补充pdo_oci)

原文地址:http://www.2cto.com/database/201412/364299.html

http://www.cnblogs.com/huangzhen/archive/2011/09/14/2176607.html

使用php的常见问题是:编译php时忘记添加某扩展,后来想添加扩展,但是因为安装php后又装了一些东西如PEAR等,不想删除目录重装,那么此时就需要自己重新增加某模块支持了,Linux操作系统下可以用phpize给PHP动态添加扩展.下面就以扩展模块 oci8为例(php连接oracle数据库需要改扩展支持)做简单的说明.(以下所有资源可以访问http://download.csdn.net/detail/haiqiao_2010/8294513 进行统一下载

1.下载Oracle客户端程序包,其中包含OCI、OCCI和JDBC-OCI等相关文件

1.1 根据Linux系统选择对应的软件,我的为32位系统,所以下载如下文件:

oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm

oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm

1.2下载地址: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html (Oracle官网下载需要注册用户)

2.安装oracle客户端,运行以下命令即可:

 

rpm -ivh oracle-instantclient11.2-basic-11.2.0.3.0.i386.rpm

rpm -ivh oracle-instantclient11.2-devel-11.2.0.3.0.i386.rpm

3.安装oci8 php扩展

3.1 下载oci8-1.4.10.tgz

下载地址:http://pecl.php.net/get/oci8-1.4.10.tgz

3.2 把下载文件上传至linux服务器,并进行解压

命令:tar zxvf oci8-1.4.10.tgz#解压

3.3 转到解压目录

命令:cd oci8-1.4.10

3.4 使用phpize准备 PHP 外挂模块的编译环境,会根据指定的环境变量生成编译时需要的makefile,phpize是属于php-devel的内容,所以centos下只要运行yum install php-devel进行安装即可 (注意:/usr/local/php/bin/phpize 为我的php目录,不同则需改之;如果是64位的系统,client改成client64)

/usr/local/php/bin/phpize CFLAGS=”-I/usr/lib/oracle/11.1/client” CXXFLAGS=”-I/usr/lib/oracle/11.1/client”

3.5 编译,安装

 

要有与现有php完全相同的php压缩包。我用的是php-5.5.3.tar.gz。展开后进入里面的ext/oci8目录下,

然后执行命令: /usr/local/php/bin/phpize #这是一个可执行的文本文件,要确保它在系统中

会发现当前目录下多了一些configure文件,

如果没报错,则运行命令;

./configure –with-php-config=/usr/local/php/bin/php-config –with-oci8=/usr/lib/oracle/11.1/client

 

注意要先确保/usr/local/php/bin/php-config存在。如果你的php安装路径不是默认的,要改。

再运行以下命令 ,然后它告诉你一个目录,你把该目录下的oci8.so拷贝到你php.ini中的extension_dir指向的目录中

make
make install需要强调的是make的时候会报错,显示各种找不到库文件,需要对makefile文件进行修改加入oralce的运行库地址

打开makefile,寻找INCLUDE,形式如下:

INCLUDES = -I/usr/local/php/include/php -I/usr/include/oracle/10.2.0.3/client

然后在末尾加上=”-I/usr/lib/oracle/11.1/client,然后重新make就会成功了。

4. 修改PHP.ini(/usr/local/php/etc/php.ini)

在extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/”后增加一行:

extension = “oci8.so”

注意:要确保/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/ 该目录下有oci8.so文件

5.重启apache,让oci生效

6.在web目录下创建phpinfo.php文件在其中输入一下内容,并通过web访问

 

<?php
	phpinfo();
?>

如果找到OCI8的部分就说明OCI安装正常了,如下图所示\
\

说明oci8安装成功,接下来就可以使用php访问oracle数据库

 

补充:pdo_oci的安装

1)进入文件夹

# cd php-5.3.10/ext/pdo_oci/

2) 用phpize来扩展,文件夹内执行: phpize

[root@jinniu-test3 pdo_oci]# /alidata/server/php/bin/phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626

3) 编译安装

# ./configure --with-php-config=/alidata/server/php/bin/php-config --with-pdo-oci=/usr/lib/oracle/12.1/client64
# make && make install

这里同样注意,如果发生错误,则修改Makefile,在其中的INCLUDES继续添加以下内容(根据自己的路径修改):

-I/usr/include/oracle/12.1/client64 -I/usr/lib/oracle/12.1/client64

执行顺利完成后,最后一行可以看到,已经将pdo_oci.so文件放入php的modules下,只需修改下php.ini文件,添加extension=pdo_oci.so即可

PHPWord利用模板替换字符串生成精确的word文档

phpword处理docx模板时候始终发生神奇的BUG,就是复制原版例子里的${Value1}进自己的模板然后替换是没问题的,但是只要一改动这个变量文字,PHP做相应替换就失效了。

用了下残废百度无果,一怒翻起google,准确度高多了。

原来有2个PHPWord项目:

其中适用比较广的是PHPOffice项目下的一个子项目

Git地址:https://github.com/PHPOffice/PHPWord

查看官方的文档:

http://phpword.readthedocs.org/en/latest/templates-processing.html?highlight=replace

具体如何用模板做替换:

  1. include_once (‘exec/lib/phpword/src/PhpWord/PHPWord.php’);
  2. use PhpOffice\PhpWord\Autoloader;
  3. use PhpOffice\PhpWord\Settings;
  4. use PhpOffice\PhpWord\IOFactory;
  5. include_once (‘exec/lib/phpword/src/PhpWord/Autoloader.php’);
  6. Autoloader::register();
  7. Settings::loadConfig();
  8. // Create a new PHPWord Object
  9. $PHPWord = new \PhpOffice\PhpWord\PhpWord();
  10. $templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor(‘statics/template/adminPositive.docx’);
  11. $templateProcessor->setValue(‘xm1’‘姓名’);
  12. $templateProcessor->setValue(‘zw1’‘公务员’);
  13. $templateProcessor->setValue(‘sfz1’‘360281199909090009’);
  14. $templateProcessor->setValue(‘gz1’‘统发’);
  15. //$templateProcessor->setValue(‘Street’, ‘Coming-Undone-Street 32’);
  16. $templateProcessor->saveAs(‘test.docx’);

这里要注意的是换行问题。

另外copy一篇比较nice的博文做个备份

转载自:http://wangye.org/blog/archives/943/

===============================================================================================

最近一个项目开发要用到PHP技术导出Word文档,比较了几种方案,首先是使用Microsoft Office自带的ActiveX/COM组件,比如Word.Application,这种方式的优点是格式兼容度高,可以生成纯doc的Word2003格式文档,缺点一是比较占资源(调用会启动一个WINWORD.EXE进程),不适合Web多用户访问使用;二是PHP这种Web开发技术大多数是跑在Linux服务器上,当然也就无法使用Windows下的技术了,平台可移植和兼容性不好。第二种生成Word的方案是生成Word兼容的网页格式,然后以Word方式打开,这种方案总体上感觉怪怪的,毕竟文件格式是HTML的,而且格式兼容度不好,不过这种方式的优点是节省服务器资源,能够快速生成;最后一种方案也就是今天的主角,采用PHPWord生成Word2007(docx)格式的文档,现在基本上微软Office Word 2003以后的版本均兼容这种格式了,对于2003版本来说,仅需要下载安装个兼容格式包(下载地址),也能正常打开这类文件,当然如果你使用的是最新版本的Office(包括但不限于Office 2007、Office 2010)则不需要安装此格式包。

好了,下面我就介绍一下PHPWord,大家可以通过访问项目主页下载并获得关于项目的更多信息。

我在使用过程中主要遇到了中文乱码的问题,结合网上大神们的指导,通过下面的方式解决了这类问题,希望对大家有所帮助。

1、增加东亚字体支持

打开并编辑路径/Writer/Word2007/Base.php文件内容,大概在第349行(行数随着版本可能会有变化)大概函数_writeTextStyle内添加:

  1. $objWriter->writeAttribute(‘w:eastAsia’$font)

比如我的修改片段基本是下面这样:

  1. // Font
  2. if($font != ‘Arial’) {
  3.     $objWriter->startElement(‘w:rFonts’);
  4.         $objWriter->writeAttribute(‘w:eastAsia’$font); // 添加这行
  5.         $objWriter->writeAttribute(‘w:ascii’$font);
  6.         $objWriter->writeAttribute(‘w:hAnsi’$font);
  7.         $objWriter->writeAttribute(‘w:cs’$font);
  8.     $objWriter->endElement();
  9. }

2. 解决中文乱码问题

编辑PHPWord/Template.php,找到代码$replace = utf8_encode($replace);,删除或者注释掉这行代码,添加$replace = iconv( 'gbk','utf-8', $replace);,比如代码改为如下:

  1. /**
  2.  * Set a Template value
  3.  * 
  4.  * @param mixed $search
  5.  * @param mixed $replace
  6.  */
  7. public function setValue($search$replace) {
  8.     if(substr($search, 0, 2) !== ‘${‘ && substr($search, -1) !== ‘}’) {
  9.         $search = ‘${‘.$search.‘}’;
  10.     }
  11.     if(!is_array($replace)) {
  12.         //$replace = utf8_encode($replace);
  13.         $replace =iconv(‘gbk’‘utf-8’$replace); // 注释掉上面行后添加这行
  14.     }
  15.     $this->_documentXML = str_replace($search$replace$this->_documentXML);
  16. }

调用方式如下:

  1. $document->setValue(‘Template’, iconv(‘utf-8’‘GB2312//IGNORE’‘中文’));

上面的代码主要解决模板的问题,下面同样的道理,解决Section添加文本的问题,找到代码$givenText = utf8_encode($text);,删除或者注释掉这行代码,添加$givenText = iconv('gbk', 'utf-8', $text);,比如代码如下:

  1. /**
  2.  * Add a Text Element
  3.  * 
  4.  * @param string $text
  5.  * @param mixed $styleFont
  6.  * @param mixed $styleParagraph
  7.  * @return PHPWord_Section_Text
  8.  */
  9. public function addText($text$styleFont = null, $styleParagraph = null) {
  10.     //$givenText = utf8_encode($text);
  11.     $givenText = iconv(‘gbk’‘utf-8’$text); // 注释掉上面行后添加这行
  12.     $text = new PHPWord_Section_Text($givenText$styleFont$styleParagraph);
  13.     $this->_elementCollection[] = $text;
  14.     return $text;
  15. }

调用方式和上面的模板调用大同小异,这边就不列举了。

折腾了这么多,突然发现网上还有另外一个版本的PhpWord,项目类名大小写上略有不同,隶属于PHPOffice/PHPWordGitHub项目地址文档)。这个版本的PHPWord内容更加丰富,支持的功能也比较多(包括行间距,缩进和首行缩进等),最后我也采取的这个版本的PHPWord,值得注意的是这两个版本的PHPWord在API接口上基本一致,可以通用。但是有些API,在PHPOffice/PHPWord里是不推荐的,比如createSection需要改成addSection,另外应用这个版本的PHPWord不需要像上面那样做任何中文支持的修改,比较省事。

这两个PHPWord项目的官方都提供了较详细的使用例子和文档,这里就不介绍了。最后提示的是:在模板模式下loadTemplate,只能使用setValue等模板操作方法,不能再添加段落或者段落修改了。这个略有不便。

参考文档:phpword 部分BUG修改笔记及心得

对于PHPOffice/PHPWord我提供一个简单的例子供参考(当然官方例子更多):

  1. require_once ‘PhpOffice/PhpWord/PhpWord.php’// 包含头文件
  2. use PhpOffice\PhpWord\Autoloader;
  3. use PhpOffice\PhpWord\Settings;
  4. use PhpOffice\PhpWord\IOFactory;
  5. require_once __DIR__ . ‘/PhpOffice/PhpWord/Autoloader.php’;
  6. Autoloader::register();
  7. Settings::loadConfig();
  8. // Create a new PHPWord Object
  9. $PHPWord = new \PhpOffice\PhpWord\PhpWord();
  10. $PHPWordHelpernew \PhpOffice\PhpWord\Shared\Font();
  11. $PHPWord->setDefaultFontName(‘仿宋’); // 全局字体
  12. $PHPWord->setDefaultFontSize(16);     // 全局字号为3号
  13. // 设置文档的属性,这些在对文档右击属性可以看到,也可以省去这些步骤
  14. $properties = $PHPWord->getDocumentProperties();
  15. $properties->setCreator(‘张三’);   // 创建者
  16. $properties->setCompany(‘某公司’); // 公司
  17. $properties->setTitle(‘某某文档’); // 标题
  18. $properties->setDescription(‘http://wangye.org’); // 描述
  19. $properties->setLastModifiedBy(‘李四’); // 最后修改
  20. $properties->setCreated( time() );      // 创建时间
  21. $properties->setModified( time() );     // 修改时间
  22. // 添加3号仿宋字体到’FangSong16pt’留着下面使用
  23. $PHPWord->addFontStyle(‘FangSong16pt’array(‘name’=>‘仿宋’‘size’=>16));
  24. // 添加段落样式到’Normal’以备下面使用
  25. $PHPWord->addParagraphStyle(
  26.   ‘Normal’,array(
  27.     ‘align’=>‘both’,
  28.     ‘spaceBefore’ => 0,
  29.     ‘spaceAfter’ => 0,
  30.     ‘spacing’=>$PHPWordHelper->pointSizeToTwips(2.8),
  31.     ‘lineHeight’ => 1.19,  // 行间距
  32.     ‘indentation’ => array// 首行缩进
  33.       ‘firstLine’ => $PHPWordHelper->pointSizeToTwips(32)
  34.     )
  35.   )
  36. );
  37. // Section样式:上3.5厘米、下3.8厘米、左3厘米、右3厘米,页脚3厘米
  38. // 注意这里厘米(centimeter)要转换为twips单位
  39. $sectionStyle = array(
  40.     ‘orientation’ => null,
  41.     ‘marginLeft’ => $PHPWordHelper->centimeterSizeToTwips(3),
  42.     ‘marginRight’ => $PHPWordHelper->centimeterSizeToTwips(3),
  43.     ‘marginTop’ => $PHPWordHelper->centimeterSizeToTwips(3.5),
  44.     ‘marginBottom’ => $PHPWordHelper->centimeterSizeToTwips(3.8),
  45.     ‘pageNumberingStart’ => 1, // 页码从1开始
  46.     ‘footerHeight’ => $PHPWordHelper->centimeterSizeToTwips(3),
  47. );
  48. $section = $PHPWord->addSection($sectionStyle); // 添加一节
  49. // 下面这句是输入文档内容,注意这里用到了刚才我们添加的
  50. // 字体样式FangSong16pt和段落样式Normal
  51. $section->addText(‘文档内容’‘FangSong16pt’‘Normal’);
  52. $section->addTextBreak(1); // 新起一个空白段落
  53. $objWriter = IOFactory::createWriter($PHPWord‘Word2007’);
  54. $objWriter->save(‘/path/to/file’); // 保存到/path/to/file路径下

CentOS下添加PHP扩展模块mssql

原文地址:http://www.showerlee.com/archives/1269

问题描述:利用yum安装了php-mssql,但仍然phpinfo中没有mssql的信息,最后用了本文编译安装的方法,成功了。

原文内容:

如果在LINUX系统上需要使用PHP连接Microsoft SQL Server 2005数据库,我们常见的连接数据库方式是使用ODBC方式连接.

FreeTDS为Linux系统提供了TDS协议的开源客户端。由于MSSQL和Sybase使用的恰是TDS协议,所以在Linux中可以用FreeTDS连接MSSQL,下面简绍使用php的db-lib连接Microsoft SQL Server 2005数据库.

 

LINUX操作系统:   centOS6.3 64bit(安装了系统默认开发包)

APACHE:            httpd-2.4.4

PHP:                  php-5.4.13

freetds:             freetds-0.91

 

一.关闭iptables和SELINUX

# service iptables stop

# setenforce 0

# vi /etc/sysconfig/selinux

—————

SELINUX=disabled

—————

 

二.同步时间

# ntpdate cn.pool.ntp.org

 

一.安装APACHE+PHP

传送门:http://www.showerlee.com/archives/6

 

二.使用FreeTDS启用PHP连接MSSQL

1.下载FreeTds

# su –

# wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-0.91.tar.gz

 

2.安装FreeTds

# tar -zxvf freetds-0.91.tar.gz

# cd freetds-0.91

# ./configure –prefix=/usr/local/freetds –with-tdsver=8.0 –enable-msdblib –enable-dbmfix –with-gnu-ld –enable-shared –enable-static

# make && make install

 

3.启用PHP连接MSSQL

方法一:编译php加上freetds路径(初次部署推荐)

# wget http://museum.php.net/php5/php-5.4.13.tar.gz

# tar -jxvf php-5.4.13.tar.bz2

# cd php-5.4.13

# ./configure –prefix=/usr/local/php5 –with-apxs2=/usr/local/apache2/bin/apxs –with-libxml-dir=/usr/local/lib –with-zlib-dir=/usr/local/lib –with-mysql=/usr/local/mysql –with-mysqli=/usr/local/mysql/bin/mysql_config –with-gd –enable-soap –enable-sockets  –enable-xml –enable-mbstring –with-png-dir=/usr/local –with-jpeg-dir=/usr/local –with-curl=/usr/lib –with-freetype-dir=/usr/include/freetype2/freetype/ –enable-bcmath –enable-calendar –enable-zip –enable-maintainer-zts –with-mssql=/usr/local/freetds

# make && make install

 

方法二:编译PHP的mssql扩展并加上freetds路径(二次部署推荐)

# wget http://cn2.php.net/distributions/php-5.4.13.tar.bz2

# tar -jxvf php-5.4.13.tar.bz2

# cd php-5.4.13/ext/mssql

# /usr/local/php/bin/phpize

# ./configure –with-php-config=/usr/local/php/bin/php-config –with-mssql=/usr/local/freetds

# make && make install

 

安装完毕,按照编译安装后的提示

mssql.so模块会默认保存在 /usr/local/php5/lib/php/extensions/no-debug-zts-20090626/ 目录下

 

加载该模块到php

# vi /usr/local/php5/lib/php.ini

添加如下行:

extension = “/usr/local/php5/lib/php/extensions/no-debug-zts-20090626/mssql.so”

重启apache:

# /usr/local/apache2/bin/apachectl restart

注: 如果编译php加载freetds 时候出现不能找到freetds目录,则需要以下操作(官方的Faq)

# touch /usr/local/freetds/include/tds.h

# touch /usr/local/freetds/lib/libtds.a

 

4.添加phpinfo功能,测试页面

添加以下内容info.php到/usr/local/apache2/htdocs/下,测试php模块是否加载.

# vi  /usr/local/apache2/htdocs/info.php

—————

<?php

echo phpinfo();

?>

—————

检查80端口是否打开

# lsof -i:80

浏览器输入 http://localhost/info.php

显示有如下测试页面内容, mssql.so模块即在PHP下加载成功
mssql

 

5.数据库连接测试页面:

假定mssql数据库IP为192.168.100.10,端口为1433,管理员账号密码都为”sa”

# vi /usr/local/apache2/htdocs/test_mssql_conn.php

———————————————

<?php

if(mssql_connect(‘192.168.100.10,1433′,’sa’,’sa’)){

echo   “成功 “;

}

else   {

echo   “失败 “;

}

?>

———————————————

 

浏览器输入 http://localhost/test_mssql_conn.php

测试最终连接状态.

 

大功告成….

后记: 如果有些朋友使用Yum安装的LAMP环境,然后后期需要添加mssql模块到PHP.

部署方法:

# yum install php-mssql -y

# service httpd restart

安装Composer

安装了好久才成功,关键点就在于网络。。

安装建议有以下几点:

1. 由于网络原因,执行官方推荐的各种安装命令都报错。那么就不要管那些命令了,直接下载文件composer.phar。

2. 将composer.phar拷贝至所需的项目目录,即composer.json所在的目录。

3. 命令行当前目录切换至项目目录下,执行下面的命令,添加中国镜像,否则又会由于网络原因卡死。。

php composer.par config repo.packagist composer https://packagist.phpcomposer.com

php使用mysqldump命令导出数据文件内容为空的问题

目录下也生成文件1.sql了,但是0字节,空的。

解决办法:

1.  去除空格(-u跟用户名的空格,-p跟密码的空格):
system(‘mysqldump -uroot -p123456 exp>D:/bak/exp.sql’, $i);
2. mysqldump.exe文件的路径问题,在命令中必须指定该文件的路径,且路径中的任何一个文件夹名字中都不能有空格
system(‘E:/xampp/mysql/bin/mysqldump -uroot -p123456 exp>D:/bak/exp.sql’, $i);
3. 这一点必须要注意,mysql的数据库密码一定不能为空,如果密码为空,那么mysqldump 就不可以用了

Zend Framework如何不使用伪静态(rewrite)

Zend Framework的原理是把所有文件的访问都引向单一入口程序index.php,然后再由Zend_Controller_Router_Route进行路由转发,如果使用使用Apache服务器的.htaccess重写规则就必须打开Apache的服务器的mod_rewrite模块,但是很多的服务器是没有打开这个模块的,比如你买了一个空间,结果空间没有打开这个模块,那你又必须使用,怎么办呢?Zend Framework就不可以使用了吗?有的人说不可以,巧妇难为无米之炊。但是我想想觉得如果这个问题都没有解决Zend Framework怎么能在PHP界立足呢?
后来我找到了解决的方法。方法其实很简单,就是在访问的时候加上index.php就可以了,例如:正常情况下的URL:http://www.youdomain.com/controller/action。现在我们只需把URL改成:http://www.youdomain.com/index.php/controller/action,并把.htaccess删除掉就可以了。

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=1782