开发者社区 问答 正文

centos lnmp 安装 pdo扩展

问题遇到的现象和发生背景 安装pdo 下载的是 wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz 然后解压 进入目录 phpize 紧接着 运行了 ./configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql 然后 运行 ln -s /usr/local/mysql/include/* /usr/local/include/ 最后 make

运行结果及报错内容 报错 In file included from /usr/local/PDO_MYSQL-1.0.2/pdo_mysql.c:31: /usr/local/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:75:90: error: expected ‘;’, ‘,’ or ‘’ before ‘TSRMLS_DC’ ysql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *file, int line TSRMLS_DC); 请求大佬帮助

展开
收起
5uo7p7wwrfyb2 2022-07-22 14:01:53 844 分享
分享
版权
举报
阿里云 AI 助理回答

遇到您描述的问题,主要是因为在编译PDO_MYSQL扩展时,TSRMLS_DC宏的使用与您的PHP环境不匹配导致的编译错误。为了解决这个问题,请按照以下步骤操作:

  1. 问题分析

    • 错误描述:编译pdo_mysql扩展时出现“expected ‘;’, ‘,’ or ‘’ before ‘TSRMLS_DC’”错误,表明在php_pdo_mysql_int.h文件中的某一行代码对TSRMLS_DC宏的使用不符合预期。
    • 可能原因:此错误通常是因为PHP版本与扩展源码不兼容,特别是与线程安全(Thread Safety, TS)相关的宏定义不匹配。
  2. 解决方案

    • 检查PHP版本与线程安全性: 首先,确认您的PHP安装是否为线程安全(TS)版本。非线程安全(NTS)版本不需要TSRMLS_*宏。可以通过运行php -i | grep "Thread Safety"来查看。

    • 调整编译参数: 如果是NTS版本,尝试从编译参数中移除所有与TSRMLS相关的部分。如果必须使用TS版本且遇到宏定义问题,可能需要手动调整源代码或寻找与您PHP版本兼容的PDO_MYSQL扩展版本。

    • 重新编译: 假设您已确定正确的编译方向,回到解压后的PDO_MYSQL扩展目录,根据PHP版本特性调整./configure命令。对于NTS版本,可能无需任何关于TSRMLS的参数。修改后重新执行以下步骤:

      phpize
      ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
      make clean # 清理之前的编译结果,确保无遗留问题
      make
      

      如果是TS版本且需调整宏定义,请直接编辑报错提及的源文件,如php_pdo_mysql_int.h,确保TSRMLS_DC等宏的正确使用,再进行编译。

  3. 注意事项

    • 权限要求:确保在整个过程中具有足够的权限执行编译和安装操作。
    • 备份原文件:在修改任何系统或扩展源文件之前,建议先备份原文件,以防万一操作失误。
  4. 验证与测试

    • 验证编译成功:观察make命令执行完毕后是否有错误提示,确保没有错误信息输出。
    • 测试扩展:将编译成功的扩展.so文件放入PHP的扩展目录,并在php.ini中添加相应extension指令启用它。重启PHP服务后,通过php -m检查是否列出了pdo_mysql,以及通过编写简单的PHP脚本测试数据库连接功能。

通过上述步骤,您应该能够解决编译PDO_MYSQL扩展时遇到的TSRMLS_DC相关错误。如果问题仍然存在,考虑检查PHP的详细版本信息及编译配置,或者寻求更专业的社区支持。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答