首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php新扩展适用于cli 'php‘命令,但不适用于浏览器。

问php新扩展适用于cli 'php‘命令,但不适用于浏览器。
EN

Stack Overflow用户
提问于 2014-08-15 13:44:34
回答 1查看 589关注 0票数 0

我正在使用php创建一个php扩展,其中包含一个解析mysql表的函数。

extension.cpp

代码语言:javascript
复制
#include <phpcpp.h>
#include <iostream>
#include <mysql.h>

Php::Value  ss_parse_table(Php::Parameters &params)
{ 
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_FIELD *field;

/* INITIALIZE CONNECTION HANDLER, DO NOT CHANGE */
conn = mysql_init (NULL);


// @param orders: host,username,password,database,
mysql_real_connect (conn, params[0], params[1], params[2], params[3], 3306, NULL, 0);
/* show tables in the database (test for errors also) */


mysql_query(conn,("SELECT * FROM table");
res = mysql_store_result(conn);


// get the number of the columns
int num_fields = mysql_num_fields(res);

Php::Value array;
Php::Value rows;
int i = 0;

while((field = mysql_fetch_field(res))){
    array[i] = field->name;
    i++;
}

int x = 0;
while ((row = mysql_fetch_row(res)))
{

    for (int z=0;z<num_fields;z++) 
    {
        std::string fieldname = array[z];
        rows[x][fieldname] = row[z];
    }

    x++;
}

// DON'T FORGET TO CLEAN RESULT AFTER YOU DON'T NEED IT 
// ANYMORE
if(res != NULL)
   mysql_free_result(res);

/* disconnect from server */
mysql_close (conn);

return rows;

}

extern "C" {


  PHPCPP_EXPORT void *get_module() 
  {
    \
    static Php::Extension extension("extension", "1.0");
    extension.add("ss_parse_table",ss_parse_table);
    // @todo    add your own functions, classes, namespaces to the extension

    // return the extension
    return extension;
  }
}

在编译过程中,我编辑了MakeFile并在编译器命令中追加了mysql_config --cflags --libs,以便加载mysql,所以看起来像g++ -shared -o extension.so extension.o -lphpcpp mysql_config --cflags --libs,编译工作正常。

我尝试通过使用扩展中的定义函数(ss_parse_table)来测试编译是否真的工作。所以我创建了一个php文件:

test.php

代码语言:javascript
复制
<?php
  print_r(ss_parse_table( "localhost", "dbuser","dbpassword","database"));
 ?>

在CLI中,当我运行命令'php /mnt/test/index.php‘时,它工作得很好。该命令将输出由定义扩展函数(ss_parse_table)返回的数组,如下所示

代码语言:javascript
复制
Array
(
  [0] => Array
  (
    [id] => 'erd'
  )
)

但是当我从浏览器上浏览它时,http会失败。

“未收到数据”(铬错误)或“连接被重置”(firefox错误)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-08 12:59:20

我也有同样的问题。我通过将libmysqlclient.so文件所在的目录添加到系统路径来解决这个问题:

代码语言:javascript
复制
PATH=$PATH:/usr/lib64

然后,重新启动httpd服务:

代码语言:javascript
复制
systemctl restart httpd.service

在那之后,一切都很顺利。

我希望它能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25327543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档