我在我的本地机器上使用Ubuntu Linux 12.04 LTS.我很久以前在我的机器上安装了LAMP.现在我想启用以下PHP扩展:
首先,我想检查是否启用了这些PHP扩展.我搜索了很多关于如何检查已安装/启用的PHP扩展,但每次我发现如何在Ubuntu Linux上安装这些扩展时.那么有人可以告诉我如何在Ubuntu Linux 12.04 LTS中检查启用/禁用的PHP扩展?提前致谢.
我随处可见(包括在官方文档上)默认情况下,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 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
我正在尝试在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) 我正在非常困难的时候让命令"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文件的编译状态,以便以后执行它而不必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) 我根据本手册在Ubuntu上安装了PPA的php5.6和php7.0
http://lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu
但我没有得到如何使用peclphp5.6或php7.0 安装扩展.
例如,我已经安装的版本,libevent或amqp在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扩展,可以动态检查从PHP文件生成的每个操作码并对其进行一些检查.
我遇到了几个网站,发现了一些功能zend_set_user_opcode_handler,但我不明白这个功能如何用来获得完整的操作码ASSIGN !0, 50.
我知道一个命令php -d vld.active=1 -d vld.execute=0 -f [filename].php,我可以使用它来生成PHP操作码,但据我所知,你只能在PHP程序终止后访问操作码.
我想从扩展中得到的是一个操作码,它是在函数执行时逐个(动态地)获得的.
有人可以帮我解决这个问题吗?
我对安装包几乎一无所知.通过遵循一个非常具体的教程,我设法用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(在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? …
php-extension ×10
php ×9
centos ×2
macos ×2
ubuntu ×2
c ×1
delphi ×1
delphi-2010 ×1
install ×1
linux ×1
pear ×1
pecl ×1
php-7 ×1
php4delphi ×1
postgresql ×1
symfony ×1
ubuntu-12.04 ×1
yum ×1
zip ×1