标签: php-extension

如何检查在Ubuntu Linux 12.04 LTS中启用/禁用了哪些PHP扩展?

我在我的本地机器上使用Ubuntu Linux 12.04 LTS.我很久以前在我的机器上安装了LAMP.现在我想启用以下PHP扩展:

  1. php_zip
  2. php_xml
  3. php_gd2

首先,我想检查是否启用了这些PHP扩展.我搜索了很多关于如何检查已安装/启用的PHP扩展,但每次我发现如何在Ubuntu Linux上安装这些扩展时.那么有人可以告诉我如何在Ubuntu Linux 12.04 LTS中检查启用/禁用的PHP扩展?提前致谢.

php linux php-extension ubuntu-12.04

60
推荐指数
4
解决办法
16万
查看次数

PDO_SQLITE驱动程序不存在..怎么办?

我随处可见(包括在官方文档上)默认情况下,PHP中应该包含PDO_SQLITE驱动程序.

但是,当我看着我时extension_directory,我只看到这些文件:

gd.so mcrypt.so mysqli.so mysql.so pdo_mysql.so pdo.so

因此,我正在尝试安装的框架(Symfony)告诉我,我需要安装PDO_SQLITE或SQLite3 .so扩展...

有人可以帮忙吗?我可以尝试在网络上的某个地方找到所需的.so文件,将其放在我的extensions_directory中,然后将其包含在php.ini中吗?

BTW:我正在通过ubuntu上的apt-get运行php 5.3.6.

php ubuntu php-extension symfony

36
推荐指数
4
解决办法
4万
查看次数

安装PHP Zip扩展

我正在尝试安装PHP Zip扩展.

我的服务器没有外部互联网访问权限,所以我自己从PECL下载了它:http://pecl.php.net/package/zip.我选择1.10.2,最新的"稳定"版本,并将其转移到我的服务器.

我跑了:

pear install zip-1.10.2.tgz
Run Code Online (Sandbox Code Playgroud)

并补充说

extension=zip.so
Run Code Online (Sandbox Code Playgroud)

按照指示到php.ini.我可以看到zip.so已创建并放在右侧extension_dir文件夹中.我重新启动了apache然后检查它是否通过运行加载:

php -m
Run Code Online (Sandbox Code Playgroud)

尽管如此,"zip"仍然不在该列表中.

我错过了一步还是做错了什么?我觉得这应该很简单,我开始觉得很傻,哈哈.

其他可能重要的东西:

CentOS Apache 2.2.3 PHP 5.2.16

php zip pear centos php-extension

35
推荐指数
7
解决办法
14万
查看次数

无法在OS X 10.9 Mavericks中phpize或配置扩展

我正在尝试在OS X 10.9 Mavericks上构建memcached扩展,以便与内置的PHP 5.4一起使用,最初我尝试pecl install memcached但是抛出了以下内容.

checking for zlib location... configure: error: memcached support requires ZLIB. Use --with-zlib-dir=<DIR> to specify the prefix where ZLIB headers and library are located
ERROR: `/private/tmp/pear/install/memcached/configure' failed
Run Code Online (Sandbox Code Playgroud)

所以我创建了一个tmp目录并执行pecl download memcached,解压缩代码并cd到相应的目录.

试图phpize它返回以下内容:

grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:        
Zend Module Api No:     
Zend Extension Api No:  
Run Code Online (Sandbox Code Playgroud)

我刚刚安装了zlib并在我的安装时指向./configure. ./configure --with-zlib-dir=/usr/local/Cellar/zlib/1.2.8我收到以下错误消息:

checking …
Run Code Online (Sandbox Code Playgroud)

php macos php-extension osx-mavericks

34
推荐指数
2
解决办法
5万
查看次数

在Mac OS X上启用PHP中的PostgreSQL支持

我正在非常困难的时候让命令"pg_connect()"在我的Mac上正常工作.我正在编写一个PHP脚本(从控制台执行)来读取PostgreSQL数据库并通过电子邮件发送报告.

我已经进入我的php.ini文件并添加了

extension=pgsql.so
Run Code Online (Sandbox Code Playgroud)

但是,我遇到了以下错误.

PHP警告:PHP启动:无法加载动态库'/usr/lib/php/extensions/no-debug-non-zts-20090626/php_pgsql.so' - dlopen(/ usr/lib/php/extensions/no-debug -non-zts-20090626/php_pgsql.so,9):在第0行的未知中找不到图像
PHP致命错误:在...中调用未定义的函数pg_connect()(此处为blah文件)

在运行时phpinfo(),我对PostgreSQL一无所知,那么我的问题是什么?

php postgresql macos php-extension

30
推荐指数
4
解决办法
6万
查看次数

预编译PHP文件

作为一个学习练习,我试图保存php文件的编译状态,以便以后执行它而不必zend_compile_file再次执行.

我做的第一件事是写一个钩子的扩展zend_compile_file.如果请求是在未编译的文件(即:file.php)上进行的,则会将zend_op_array数据转储到另一个文件(即:compiled-file.php).如果请求是在这样的编译文件上进行的,它会将数据加载到新的zend_op_array中然后返回它.

为简单起见,我忽略了与类和函数相关的所有内容,因此我不希望我的扩展适用于包含这些内容的脚本.但我认为其他更简单的脚本应该可行吗?

好吧,它适用于非常简单的脚本,但通常它只是挂起并达到最大执行时间限制.我发现它总是在错误的条件分支上失败.例如,这个脚本可以工作:

<?php
$a = 10;
$b = 5;
if ($b < $a)
    echo $a;
Run Code Online (Sandbox Code Playgroud)

虽然这个会挂起:

<?php
$a = 10;
$b = 5;
if ($b > $a)
    echo $a;
Run Code Online (Sandbox Code Playgroud)

我的问题:我是否正确假设对于没有函数或类的简单脚本,制作zend_op_array的深层副本并返回它应该足以复制php编译?如果没有,我应采取的其他步骤是什么?

以下是我的扩展的相关文件: opdumper.c oploader.c

编辑:我设法通过更改此代码"修复"我的问题:

void dump_znode_op(FILE* fp, znode_op node, zend_uchar type)
{
    fwrite(&type, sizeof(type), 1, fp);
    switch(type) {
        case IS_UNDEF:
        case IS_UNUSED:
            break;
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

到这一个:

void dump_znode_op(FILE* fp, znode_op node, zend_uchar type)
{
    fwrite(&type, sizeof(type), 1, fp);
    switch(type) {
        case IS_UNDEF:
        case …
Run Code Online (Sandbox Code Playgroud)

php c php-extension php-internals

29
推荐指数
0
解决办法
936
查看次数

如何在系统中安装几个php版本时使用pecl安装特定的php版本的php扩展?

我根据本手册在Ubuntu上安装了PPA的php5.6和php7.0

http://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu

但我没有得到如何使用peclphp5.6或php7.0 安装扩展.

例如,我已经安装的版本,libeventamqp在php5.6.

现在当我输入pecl install libevent和我的活动php版本是php7.0(使用update-alternatives --set php /usr/bin/php7.0),pecl returns message thatlibevent`已经安装.

但它只安装了php5.6(这个版本是活动的),现在我想为php7.0做.

哪些命令对我有帮助?

UPD

我发现这个命令用于将pecl切换到php7.0并将它们分发给可执行的bash脚本:

#!/bin/bash

sudo update-alternatives --set php /usr/bin/php7.0

sudo pecl config-set php_ini /etc/php/7.0/cli/php.ini
sudo pecl config-set ext_dir /usr/lib/php/20151012/
sudo pecl config-set bin_dir /usr/bin/
sudo pecl config-set php_bin /usr/bin/php7.0
sudo pecl config-set php_suffix 7.0
Run Code Online (Sandbox Code Playgroud)

并为php5.6

#!/bin/bash

sudo update-alternatives --set php /usr/bin/php5.6

sudo pecl config-set php_ini /etc/php/5.6/cli/php.ini
sudo pecl config-set ext_dir /usr/lib/php/20131226/
sudo pecl config-set …
Run Code Online (Sandbox Code Playgroud)

php ubuntu pecl php-extension php-7

27
推荐指数
3
解决办法
2万
查看次数

在运行时动态获取PHP操作码

我想构建一个PHP扩展,可以动态检查从PHP文件生成的每个操作码并对其进行一些检查.

我遇到了几个网站,发现了一些功能zend_set_user_opcode_handler,但我不明白这个功能如何用来获得完整的操作码ASSIGN !0, 50.

我知道一个命令php -d vld.active=1 -d vld.execute=0 -f [filename].php,我可以使用它来生成PHP操作码,但据我所知,你只能在PHP程序终止后访问操作码.

我想从扩展中得到的是一个操作码,它是在函数执行时逐个(动态地)获得的.

有人可以帮我解决这个问题吗?

php zend-framework php-extension php-internals

25
推荐指数
1
解决办法
856
查看次数

如何在CentOS上安装PHP intl扩展?

我对安装包几乎一无所知.通过遵循一个非常具体的教程,我设法用yum安装了Zend Framework 1.

现在我需要PHP intl扩展,我无法弄清楚如何安装它.

我做到了

yum list php*intl
Run Code Online (Sandbox Code Playgroud)

并看到有一个可用.所以我做了

yum install php-intl
Run Code Online (Sandbox Code Playgroud)

并收到以下错误消息:

Error: Package: php-intl-5.3.3-14.el6_3.x86_64 (updates)
       Requires: php-common = 5.3.3-14.el6_3
       Installed: php-common-5.3.17-2.el6.remi.x86_64 (@remi)
           php-common = 5.3.17-2.el6.remi
       Available: php-common-5.3.3-3.el6_2.8.x86_64 (base)
           php-common = 5.3.3-3.el6_2.8
       Available: php-common-5.3.3-14.el6_3.x86_64 (updates)
           php-common = 5.3.3-14.el6_3
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
Run Code Online (Sandbox Code Playgroud)

我没有尝试消息中提到的建议,因为我不知道他们会做什么,我害怕破坏某些东西.这是一台生产机器,我没有其他机器可供测试.我试图找到一个与我的PHP版本相同的rpm,但没有运气.

这两个建议做了什么,是否可以安全地尝试?我还可以尝试安装intl扩展程序吗?

php install centos yum php-extension

24
推荐指数
2
解决办法
8万
查看次数

使用zend(多维数组)交换数据

我在我的应用程序中嵌入PHP(在Delphi 2010中编写),使用PHP4Delphi组件与php5ts.dll连接.我想我的程序充当PHP(sapi模块?)的扩展,因为它注册了一些可以在PHP脚本中使用的函数和常量......无论如何,在使用简单数据类型时效果很好,但是当我尝试使用多维数组时作为返回值我得到错误

Access violation at address 01CD3C35 in module 'php5ts.dll'. Read of address 0231E608.
堆栈列表
(000A2C35){php5ts.dll} [01CD3C35] destroy_op_array + $35
(004C4D61){myApp.exe } [008C5D61] php4delphi.TPHPEngine.ShutdownEngine (Line 1497, "php4delphi.pas" + 17) + $7

php4delphi.pas中的第1497行是调用的 tsrm_shutdown();

对我来说,它看起来像垃圾收集器在脚本结束时崩溃,所以我怀疑我没有正确地将数据发送回引擎...因此我的问题是如何将多维数组发送回PHP?
我正在使用的模式是

var subArray: pzval;  
_array_init(return_value, nil, 0);  
for x := 0 to Data.Count-1 do begin  
   subArray := MAKE_STD_ZVAL;  
   _array_init(subArray, nil, 0);  
   // populate subarray with data, including other subarrays
   ...
   // add subarray to the main array
   add_index_zval(return_value, x, subArray);
end;
Run Code Online (Sandbox Code Playgroud)

我是否必须"注册"我创建的子阵列?我必须增加或减少refcount或设置is_ref?IOW,如何设置子数组的return_value和zvals? …

delphi php-extension delphi-2010 php-internals php4delphi

22
推荐指数
1
解决办法
1156
查看次数