小编San*_*hal的帖子

如何在Vim中快速选择(内部)行

Vim有一些非常有用的文本运动,如ib,i),i},等等快速选择文本的一部分.但是,我经常需要在线方式模式下使用内部块.例如(带行号):

1:    $foo = array(
2:        'bar' => 'Bar',
3:        'quux' => 'Quux',
4:    );
Run Code Online (Sandbox Code Playgroud)

现在,当我的光标在2号线或3的地方和我打vib或者vi),Vim会选择行2,3和第4行的缩进空间我只想线2和3.我有试过VibVi),但他们做的一样用小写字母v.

是否有任何简单的文本动作或其他快速方式在行方式模式中选择内部块?

vim keyboard-shortcuts editor keymapping indentation

8
推荐指数
1
解决办法
1181
查看次数

如何存储zend,phing和phpunit的共享配置?

我有一个用Zend Framework编写的PHP应用程序.它使用Phing构建系统,使用PHPUnit进行单元测试.所有这些部件都有配置设置.Zend使用application.xml,Phing使用build.xml和可选的一些build.properties,以及PHPUnit使用phpunit.xml.

但是,我在哪里存储所有三个组件所需的信息?想想数据库配置(例如密码).

在我的例子中,application.xml有各种部分(开发,登台,生产)都具有不同的数据库配置.我最近在我的应用程序中集成了一个ORM,现在我想对我的模型进行单元测试.所以我有第四个数据库(单元测试),由PHPUnit使用.

PHPUnit可以处理夹具数据,但不能处理数据库架构.所以,我在想我会写一个Phing构建目标,它将数据库模式从生产或登台复制到unittest数据库.这样我就可以获得额外的好处,甚至可以对我的数据库迁移脚本进行单元测试.但为了做到这一点,Phing需要同时访问多个数据库.

我的第一个直觉就是将所有四个数据库的所有配置都放入其中build.properties并让Phing简单地生成application.xmlphpunit.xml.但是,这感觉吧,肮脏的有一个生成系统生成的配置文件.

什么是最好的解决方案?或者我应该简单地复制配置细节而不用担心太多?

思考

我可以简单地复制它们.它只是一些设置,它们不应经常更改.但我敢打赌,当他们改变时,我会忘记重复(因为它不经常发生).共享参数包括:

  • 数据库配置(开发,登台,生产和单元测试)
  • 包含路径.我们使用一些不适用于自动加载器的旧库.到目前为止,我们已经通过智能自动前置文件部分解决了这个问题.
  • 一些webservice API凭据

php phing configuration phpunit zend-framework

8
推荐指数
1
解决办法
553
查看次数

在Phing(和Ant)构建脚本中选择属性

我在构建脚本中使用数据库.所有数据库详细信息都在我的属性文件中,但我想知道如何让用户轻松选择要使用的详细信息集?我正在和Phing一起工作,但因为它与Ant非常相似,所以我也会接受Ant的答案.

这是我的样本build.properties:

# Connection details for the dev database
db.dev.hostname=localhost
db.dev.database=foo
db.dev.username=foo_user
db.dev.password=foo_password

# Connection details for the staging database
db.staging.hostname=some.remote.server
db.staging.database=bar
db.staging.username=bar_user
db.staging.password=bar_password
Run Code Online (Sandbox Code Playgroud)

我想为用户提供一个简单的构建标志来选择要使用的数据库.假设我有一个构建任务来检查数据库模式.我想提供一个这样的构建标志:

phing -Ddatabase=staging check-schema
Run Code Online (Sandbox Code Playgroud)

这应该使用db.staging.*属性来获取数据库连接详细信息.我怎么能做到这样的事情?

php ant phing properties build

8
推荐指数
1
解决办法
993
查看次数

CakePHP - 包含基于特定页面的CSS?

我想要包含一个应该应用于主页的特定css文件,以及整个网站中的6-7个其他页面.

我知道我可以通过PHP,获取URL,找到什么页面,链接css等等来做到这一点,但我想知道是否有一个光滑的方式(或任何更好的方式)使用CakePHP包含正确的CSS文件(S).

我意识到我可以从特定的视图链接CSS文件,但是 - 然后它们不会在<head>.有没有办法从视图中链接并将其显示在头部?

我希望我的问题有意义,并非常感谢任何帮助.

php cakephp cakephp-1.3

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

调试PHP内存泄漏.跟踪引用计数?

我有一个相当大的PHP脚本泄漏内存.我已经能够找出泄漏的对象,但我无法找到脚本泄漏的位置.我的脚本的某些部分是保留对泄漏对象的引用.

有什么方法可以跟踪(并且最好是回溯)PHP对象在哪里/当它的引用计数增加或减少时?

php memory-leaks reference-counting

7
推荐指数
1
解决办法
5744
查看次数

对于现有的PHP应用程序,需要一个简单的ORM或DBAL

我正在扩展现有的PHP应用程序.不幸的是,现有的应用程序是一团糟.这是所有带有原始mysql_*调用的意大利面条代码.呻吟.我不会在我要扩展的部分中那样做.

所以,我正在寻找一个简单的DBAL ORM,我可以很容易地进入并开始使用.所需功能:

  • 它必须适用于现有的数据库架构.优选地,具有最少的或没有额外的配 现有的数据库模式与现有的PHP代码质量相同(没有合理的命名约定,没有规范化等).我不想花费数天时间将数据库模式手动转换为带注释的对象属性,即教条2.
  • 它必须能够与现有的原始mysql_*查询一起工作.当脚本手动操作数据库背后的数据时,我不知道像Doctrine 2或Propel这样的ORM如何表现,但我认为它并不漂亮.
  • 它必须在PHP 5.2.x上运行.我很喜欢使用PHP 5.3,但我有打算在现有的125K线面条代码混乱,以确保它运行在PHP 5.3零利率.
  • 不需要关系.在少数地方,我需要去的关系数据,我会很高兴地调用额外的find()query()或任何自己.
  • 如果它具有一些触发支持(例如beforeSave,afterSave),则奖励积分.不是要求,但很高兴.

编辑:有人让我摆脱了痛苦.我刚刚发现125K行的spaghetti代码也改变了数据库模式.例如,在某处添加一个额外的选项,一大堆ALTER TABLE语句开始飞行.我可以用这个代码库来填充一年的TheDailyWTF.所以,还有一个要求:

  • 必须能够自动处理不断变化的数据库模式(例如,添加列).

我一直在寻找一些解决方案,但我不确定它们在满足要求的情况下会如何运作.Doctrine 2,RedBeanPhp等都需要PHP 5.3,所以它们都出来了.有一个用于PHP 5.2.x的旧版RedBeanPhp,但我不知道它是否适用于凌乱的现有数据库模式.NotORM看起来可以用于获取数据,但我不知道它是否可以为现有数据库模式进行配置,以及如何轻松地将数据放回数据库中.

理想情况下我想要一些简单的东西.例如:

$user = User::find($id);
$user->name = 'John Woo';
$user->save();
Run Code Online (Sandbox Code Playgroud)

要么:

$articles = ORM::find('article')->where('date' => '2010-01-01');
foreach ($articles as $article) {
    echo $article->name;
}
Run Code Online (Sandbox Code Playgroud)

欢迎任何提示甚至替代解决方案!

php orm dbal notorm

6
推荐指数
1
解决办法
4216
查看次数

用PHP解析结构化文本数据

我正在寻找各种(更好的)方法来解析PHP中的结构化文本数据并将该数据转换为PHP对象图.我已经看到了很多在PHP不同的解析器,适用于各种基于文本的文件格式,但几乎所有的人似乎正则表达式的一些易碎链.肯定有更好的办法!

在这个特定的情况下,我期待解析MT940文件(银行账户交易).但我也遇到了与其他文件格式相同的问题.我总是最终得到一大批正则表达式,这些正则表达式变得复杂,特别是在需要支持不同格式时.MT940也有这个问题.MT940不是严格定义的格式,几乎所有银行都使用略有不同的方言.

那么,你如何设计更强大和可扩展的解析器来处理不同的方言呢?

这是MT940的一个例子,取自这个问题:

{1:F01AHHBCH110XXX0000000000}{2:I940X           N2}{3:{108:XBS/091502}}{4:
:20:XBS/091202/0001
:25:5887/507004-50
:28C:140/1
:60F:C0914CHF7789,
:61:0912021202D36,80NTRFNONREF//0887-1202-29-941
04392579-0 LUTHY + xxx, ZUR
:86:6034?60LUTHY + xxxx, ZUR vom 01.12.09 um 16:28 Karten-Nr. 2232
2579-0
:62F:C091202CHF52,2
:64:C091302CHF52,2
-}
Run Code Online (Sandbox Code Playgroud)

php parsing mt940

6
推荐指数
1
解决办法
2192
查看次数

如何有效地计算筛选选项的总计

我正在开发一个网上商店类型的应用程序.我经常在其他网站上看到的一个功能是过滤选项的细分,之后总共过滤选项会有多少结果.您经常在计算机网站(例如Newegg)或二手车网站上看到此信息.例:

CPU:
  * AMD (315)
  * Intel (455)

Video card:
  * ATI (378)
  * Nvidia (402)
Run Code Online (Sandbox Code Playgroud)

我怎样才能有效地计算这些总数?我正在研究的网站将有许多不同的产品(10.000+),有许多不同的选择.更糟糕的是,产品在不断变化.

试图预先计算所有不同的过滤组合总数似乎是不可行的.如果我有5个不同的过滤器,每个过滤器有4个选项,那么选项的可能性就是多少20 * 16 * 12 * 8 * 4 = 122880.计算它需要很长时间.

另一种选择是按需查询并缓存结果(例如在Redis中).但是,如果不断添加和删除产品,我怎么能有效地管理缓存呢?缓存通常是陈旧的.我担心我必须以微观方式管理缓存失效,从而导致一个非常复杂和脆弱的实现.另一种方法是使广泛的缓存部分无效.但是,在无效之后,我的数据库会被需要重新计算这些总数的活跃用户的查询匆匆忙忙.

有一个漂亮而优雅的方式来处理这个问题吗?

caching filter

6
推荐指数
1
解决办法
162
查看次数

PHP PDO使用SSL连接到MS SQLServer Express

我有一个远程MS-SQL Express 2012服务器,设置用于SSL.我有我需要的所有证书.但是如何使用SSL创建与此服务器的PDO连接?我发现有很多关于使用SSL的MySQL的PDO文章,但没有使用PDO和SSL的MS-SQL.

php sql-server ssl pdo

6
推荐指数
1
解决办法
352
查看次数

DDD:我应该将Symfony EventDispatcher用于我的域事件吗?

我想知道是否应该使用Symfony EventDispatcher Component来处理我的DDD应用程序中的域事件.

对我来说,当经过良好测试的组件可用时,从头开始重新安排事件调度程序是没有意义的.但另一方面,Symfony组件使所有事件都从基类Event类扩展.这不会将我的域事件绑定到EventDispatcher组件吗?

另外,如果我这样做使用这个组件,我应该提高对应用程序范围event_dispatcher业务域的活动或者我应该保持的Symfony的应用程序事件和我的域名事件相互独立(即创建一个新的EventDispatcher)?

php events domain-driven-design symfony

6
推荐指数
1
解决办法
994
查看次数