我一直在阅读有关PHP从SPL常用的接口,如Iterator,Countable和ArrayAccess.但是,我不确切地知道它们是如何工作的.
他们的实现是否修改了PHP的核心功能,例如重载[]数组运算符?
我还读过有关Operator扩展的内容,它提供了以与低级语言相同的方式重载其他运算符的能力.由于Operator扩展明确地修改了PHP核心,我想知道ArrayAccess幕后是否采取相同的行动?
我是一个修补匠,因此我发现很难在不知道引擎盖的情况下使用它.
我读到可以通过编写扩展在 PHP 中使用 C/C++ 代码。有没有更简单的方法,比如包装魔法或类似的东西(我必须说,我听说过这个词,但不太了解包装是什么)。
我正在开发的 Web 应用程序需要能够处理同一 PHP 扩展的两个不同版本。(特别是用于 Mapserver 5.6 的 MapScript 和用于 Mapserver 6.2 的 MapScript。)
在 php 执行开始之前,脚本不会知道需要加载两个版本中的哪一个。(但每个请求只需要一个扩展。)
我原本的计划是使用php内置的dl功能,但是我发现dl因为安全问题已经被禁用了。(http://php.net/manual/en/function.dl.php)
有没有什么安全的方法可以在执行期间加载扩展?或者也许总是加载两者,但将它们放在不同的名称空间中,以便可以单独访问它们?
我想memcached在我的Mac 上安装.我已经下载并安装了它.我也将它添加到php.ini中.但仍然memcached没有加载.我意识到问题是与API版本不匹配php和phpize.
这就是我做的事情 php -v
PHP Warning: PHP Startup: memcached: Unable to initialize module
Module compiled with module API=20090626
PHP compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP 5.4.8 (cli) (built: Oct 30 2012 19:29:58)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Run Code Online (Sandbox Code Playgroud)
如果有人帮我解决这个问题我真的很感激.干杯.
我希望xdebug只追踪超过X ms或超过Y KB RAM的"跳跃",例如,每次执行时间超过100毫秒或增加内存使用量超过100KB.这样我就可以忽略数千条我不需要查看的跟踪线,并且可以使优化变得更加容易 - 因为在ZF2中,膨胀的框架需要1秒才能开始使用我们企业项目中的composer autoloader,结果在成千上万行中我真的没用.沿着这条线的某个地方,我确实发现了执行时间的较大跳跃,但不是经过长时间的滚动.
是否有一个默认选项来禁用"比X更快"执行的日志记录,或者如果没有,你知道一个帮助shell/python脚本可以只是慢速的那些吗?
为了澄清,我正在讨论通过在我的应用程序中运行xdebug_start_trace()获得的.xt文件的内容.
我正在尝试在Ubuntu 11.10上安装PHP 5.3.6的扩展.
扩展名是:php-protobuf来自https://github.com/allegro/php-protobuf.
首先,我编译它: phpize,./configure,make然后最后sudo make install.我有:
Installing shared extensions: /usr/lib/php5/20090626/
ziel@ziel:/usr/lib/php5/20090626$ ls -la protobuf.so
-rwxr-xr-x 1 root root 113599 2013-06-13 20:48 protobuf.so
Run Code Online (Sandbox Code Playgroud)
在/etc/php5/apache2/php.ini我设置:
; Directory in which the loadable extensions (modules) reside.
; http://php.net/extension-dir
extension_dir = "/usr/lib/php5/20090626/"
extension="/usr/lib/php5/20090626/protobuf.so"
Run Code Online (Sandbox Code Playgroud)
但是php -m说没有protobuf加载扩展.
[求助]我做的一切都很好.当我通过apache执行代码时,它工作.我意识到php从控制台需要php.ini包括.
几年前,我创作了一个PHP(ZEND)模块,我今天在一些项目中仍然使用它.这个模块是基于对PHP图像处理的相当基本的(即copypasta)理解而构建的,但在一种情况下工作得很漂亮.
模块从表中提取blob数据,将其解析为图像,使用imagcopyresampled()调整其大小,然后将生成的.jpg发送到浏览器,它被称为标准控制器操作.
它似乎适用于所有情况,除非用户从Facebook保存原始图像(即右键单击Facebook图像查看器并下载到桌面然后上传到客户端站点).我自己测试了很多次并且能够复制它.我还能够通过photoshop重新保存时上传相同的图像,而不会遇到问题.
我怀疑facebook图像显示在文件中添加了一些导致我的系统中断的额外元数据.
这有解决方案吗?
PHP映像模块的代码如下:
private function _buildImage($mode) {
//Prepare the output image
//Currently CROP and RESIZE are using different output onstruction calls
//So $finalImage is initialized prior to entering the mode blocks.
$finalImage = imagecreatetruecolor($this->_width, $this->_height);
$backgroundFillColor = imagecolorallocate($finalImage, RED, BLUE, GREEN);
imageFill($finalImage, 0, 0, $backgroundFillColor);
$this->_table = $this->_getTable($mode);
$image = $this->_request->image;
$this->_imageData = $this->_table->fetchEntryAsRow($image);
//Set top and left to 0 to capture the top/left corner of the orignal image.
$top = 0;
$left = 0;
$inputImage = …Run Code Online (Sandbox Code Playgroud) 我正在 KVC 网络主机的共享主机上安装 Laravel。它显示一个空白页面。我检查了日志,它说我的服务器上没有启用 proc_open() 和 passthru(),这导致了错误。我已联系我的虚拟主机寻求解决方案,但他们只能在 VPS 上启用。还有其他解决方案吗?
我正在尝试启用Laravel所需的一些php扩展.该文件的php.ini文档(https://cloud.google.com/appengine/docs/php/config/php_ini)表示将php.ini文件放在应用程序的根目录中.
这就是我的php.ini样子:
extension=openssl.so
extension=pdo.so
extension=tokenizer.so
extension=mbstring.so
google_app_engine.enable_functions = "php_sapi_name, php_uname"
Run Code Online (Sandbox Code Playgroud)
当我部署它时,我的日志说:
PHP Warning: PHP Startup: Unable to load dynamic library '/base/php_runtime/modules/openssl.so' - /base/php_runtime/modules/openssl.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/base/php_runtime/modules/pdo.so' - /base/php_runtime/modules/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library …Run Code Online (Sandbox Code Playgroud) 我可以用 c++ 而不是 c 编写 PDO 扩展吗?(Windows10,PHP7.2)
这是 pdo ext 应该涵盖的内容(根据官方文档):
config.m4 # unix build script
config.w32 # win32 build script
CREDITS
package.xml # meta information about the package
pdo_SKEL.c # standard PHP extension glue
php_pdo_SKEL.h
php_pdo_SKEL_int.h # driver private header
SKEL_dbh.c # contains the implementation of the PDO driver interface
SKEL_stmt.c # contains the implementation of the PDO statement interface
tests/
Run Code Online (Sandbox Code Playgroud)
我可以重命名pdo_SKEL.c为pdo_SKEL.cpp,并将 config.w32 中的 c 文件名更改为 cpp 吗?
我尝试了一些简单的代码和功能,它有效。但是每次当我想将 ext 注册到 pdo 时,编译都不会通过。
Error LNK2019 …Run Code Online (Sandbox Code Playgroud)