小编San*_*hal的帖子

PHP中的异步处理或消息队列(CakePHP)

我正在CakePHP中构建一个网站,该网站处理通过XML-RPC API和Web前端上传的文件.文件需要由ClamAV扫描,需要生成缩略图等.所有资源密集型工作需要一些时间,用户不必等待.所以,我正在研究PHP的异步处理,特别是CakePHP.

我遇到了CakePHP 的MultiTask插件看起来很有希望.我还遇到了各种消息队列实现,例如droprbeanstalkd.当然,我还需要某种后台进程,可能是使用某种Cake Shell实现的.我看到MultiTask使用PHP_Fork来实现多线程PHP守护进程.

我需要一些关于如何以最佳方式将所有这些部分组合在一起的建议.

  • 有一个用PHP编写的长期运行守护进程是一个好主意吗?我应该注意什么?
  • 外部消息队列实现的优点是什么?MultiTask插件不使用外部消息队列.它使用MySQL表来存储任务.
  • 我应该使用什么消息队列?dropr?beanstalkd?别的什么?
  • 我该如何实现后端处理器?分离PHP守护进程是一个好主意还是只是在寻找麻烦?

我目前的计划是使用MultiTask插件或编辑它以使用beanstald而不是它自己的MySQL表实现.队列中的作业可以简单地由任务名称和参数数组组成.PHP守护程序将监视传入的作业并将其传递给其中一个子线程.只需用给定的参数执行CakePHP任务即可.

对此有何意见,建议,评论,陷阱或火焰?

php multithreading asynchronous cakephp message-queue

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

Phing和Composer,哪个方向?

我想在我的应用程序中同时使用Phing和Composer.Phing作为构建系统和Composer来管理依赖项.但是应该使用哪种方式呢?

目前,我们正在所有服务器上全局安装Phing.Phing应该完全自动化我们各种项目的构建.只需签出项目的副本,使用默认目标运行Phing,你应该很好.这也意味着在那里应该有一个Phing目标,它要求Composer安装所有依赖项.所以,Phing叫作曲家.但我一直无法找到有关此设置的任何信息.没有ComposerTask或任何类似的东西,谷歌搜索并没有透露任何人这样工作.

但我确实看到了很多相反的方式.使用Composer的人将Phing安装为项目依赖项.

那么,每种方法的(dis)优势是什么?我试图从错误的方式做到这一点吗?

php phing build-automation dependency-management composer-php

31
推荐指数
2
解决办法
7084
查看次数

Javascript中的简单HTML清理程序

我正在寻找一个用JavaScript编写的简单HTML清理程序.它不需要100%XSS安全.

我正在我的网站上实现Markdown和WMD Markdown编辑器(来自github的SO主分支).问题是,实时预览中显示的HTML不会被过滤,就像在SO上一样.我正在寻找一个用JavaScript编写的简单/快速HTML清理程序,以便我可以过滤预览窗口的内容.

无需具有完整XSS保护的完整解析器.我不是将输出发送回服务器.在将结果存储到数据库之前,我将Markdown发送到我使用正确的完整HTML清理程序的服务器.

谷歌对我来说绝对没用.我只收到数百条(通常是不正确的)文章,介绍如何从各种服务器端语言的用户生成的HTML中过滤掉javascript.

UPDATE

我会更好地解释为什么我需要这个.我的网站有一个非常类似于StackOverflow上的编辑器.有一个文本区域可以输入MarkDown语法,下面有一个预览窗口,可以显示提交后它的样子.

当用户提交某些内容时,它将以MarkDown格式发送到服务器.服务器将其转换为HTML,然后在其上运行HTML清理程序以清理HTML.MarkDown允许任意HTML,所以我需要清理它.例如,用户输入如下内容:

<script>alert('Boo!');</script>
Run Code Online (Sandbox Code Playgroud)

MarkDown转换器不会触及它,因为它是HTML.HTML清理程序将删除它,以便脚本元素消失.

但这不是预览窗口中发生的情况.预览窗口仅将MarkDown转换为HTML,但不会对其进行清理.因此,预览窗口将具有脚本元素.这意味着预览窗口与服务器上的实际呈现不同.

我想解决这个问题,所以我需要一个快速而又脏的JavaScript HTML清理程序.使用基本元素/属性黑名单和白名单的简单方法就可以了.它不需要是XSS安全的,因为XSS保护是由服务器端的HTML清理程序完成的.

这只是为了确保预览窗口在99.99%的时间内与实际渲染相匹配,这对我来说已经足够了.

你能帮我吗?提前致谢!

html javascript wmd html-sanitizing

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

如何在MySQL中将IPv6从二进制转换为存储

我试图以有效的方式在MySQL 5.0中存储IPv6地址.我已经阅读了与此相关的其他问题,例如本文.该问题的作者最终选择了两个BIGINT字段.我的搜索也发现了另一种常用机制:使用DECIMAL(39,0)存储IPv6地址.我有两个问题.

  1. 使用DECIMAL(39,0)比其他方法(例如2*BIGINT)有什么优缺点?
  2. 如何将(在PHP中)从inet_pton()返回的二进制格式转换为MySQL可用的十进制字符串格式,以及如何转换回来以便我可以使用inet_ntop()进行漂亮打印?

php mysql ipv6

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

当一个子类没有额外属性时,Doctrine表类继承

我的映射有问题.我无法让它发挥作用.我有一个像这样的抽象基类:

/**
 * @Entity
 * @Table(name="actions")
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="type", type="string")
 * @DiscriminatorMap({"FOO" = "FooAction", "BAR" = "BarAction", ...})
 */
abstract class AbstractAction
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我有很多不同的动作,都有不同的领域.例如:

/**
 * @Entity
 * @Table(name="actions_foo")
 */
class FooAction extends AbstractAction
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

但我的一个动作(BarAction)不需要任何额外的字段,除了由AbstractAction.提供的字段.但是我该如何映射呢?我试着省略@Table,或使用相同@TableAbstractAction,但都没有效果.

/**
 * @Entity
 * @Table(name="actions")
 */
class BarAction extends AbstractAction
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

省略@Table给我一个PDOException关于丢失的表BarAction.使用@Table基类给我:

PDOException: SQLSTATE[HY093]: Invalid parameter number: number of …
Run Code Online (Sandbox Code Playgroud)

php inheritance doctrine-orm

16
推荐指数
1
解决办法
4290
查看次数

Github单个pull请求更改多个存储库?

是否有可能(甚至是智能)将多个存储库的更改打包到Github上的单个拉取请求中?或者两个单独的拉取请求会更好吗?

在我的具体情况中,我正在向巴黎添加一个新功能,即在Idiorm之上构建的简单Active Record实现.但巴黎的变化也需要改变Idiorm.Idiorm和巴黎来自同一作者,但生活在不同的资料库中.

我可以(并且应该)发出一个拉取请求吗?或者我需要制作两个,然后在第二个pull请求中注释它将无法工作,除非第一个变更集已合并到另一个存储库中?

git github

15
推荐指数
1
解决办法
4717
查看次数

检查是否从shell或其他脚本/应用程序调用了bash脚本

我正在编写一个bash脚本,将另一个命令的输出重定向到正确的位置.基本上,当从shell /命令行调用脚本时,我想将输出发送到STDOUT.但是,当bash脚本从其他应用程序执行时(例如另一个bash脚本,某个应用程序,或者我的Awesome窗口管理器中的awesome-prompt插件),我想将输出重定向到其他地方.

在bash中是否有任何方法可以查看脚本是如何被调用的?

bash shell scripting redirect

11
推荐指数
2
解决办法
7646
查看次数

css表单格布局中的圆角?

我的设计需要一些帮助.我想要显示三个相等高度的盒子,就像这个ASCI艺术:

+------+ +------+ +------+
|      | |      | |      |
|      | |      | |      |
|      | |      | |      |
+------+ +------+ +------+
Run Code Online (Sandbox Code Playgroud)

我也有一个在线示例(使用所有CSS).

盒子的内容高度不同.棘手的是这些盒子也需要圆角.为此,我使用"推拉门"技术.基本上,盒子的标记是这样的:

<div class="box">
  <div class="box-header">
    <h4>header</h4>
  </div>
  <div class="box-body">
    <p>Contents</p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

四个块元素,所以我可以使用背景图像制作圆角和边框.右上角是h4.左上角位于框标题上.右下角在外框div上,左下角在盒体上.

我正在使用CSS显示:table-cell使所有三个盒子的高度相等,但这里我的问题开始了.现在所有的盒子元素都具有相同的高度,但是盒体元素的高度不同,因为内容的高度不同.结果:右下角未处于正确位置.另见我发布的链接.

我该如何解决这个问题?现在所有盒子div的高度相等.我希望盒体扩展到使用所有可用的高度,即使内容很短.我试过身高:100%,但这不起作用.我怎样才能做到这一点?

还是有另一种方法来实现我想要的东西?我不能使用像faux这样的东西,因为我在ems中定义了框的宽度.这意味着我不能给盒子div提供一个提供两个底角的背景图像.

谷歌在这里绝对没用.任何涉及"角落"和"桌子"的查询都只是给了我一个与1990年教程相关的大量链接,这些教程使用3x3桌子作圆角.

至于浏览器兼容性,如果IE7/8也可以处理它会很好但是不需要(在这种情况下我可以替换为不等高度的浮点数).对于我正在开发的网站,我估计IE市场份额为20%或更低.我根本不关心IE6.

任何提示都非常感谢!

html css

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

DataMapper模式是否会破坏MVC?

我一直在阅读多个PHP框架,尤其是Zend框架,但我对前进的正确方法感到困惑.

Zend Framework不使用ActiveRecords,而是使用表数据网关和行数据网关模式,并使用DataMapper将行数据网关的内容映射到模型,因为当模型没有1时,ActiveRecord会崩溃: 1映射到数据库表.Zend快速入门指南中有一个例子.

对我来说,他们的例子看起来非常臃肿,到处都是大量的吸气剂和制定者.我发现了各种关于Domain Driven Design的博客文章,认为使用这么多的getter和setter是不好的做法,因为它将所有内部模型数据暴露给外部,因此它没有公共属性的优势.这是一个例子.

我的问题:如果你删除那些getter和setter,你将如何呈现你的观点?在某些时候,数据必须点击视图,以便您可以实际向用户显示某些内容.遵循DDD建议似乎打破了MVC中M和V之间的分离.继MVC和Zend之后,似乎打破了DDD并让我为所有模型输入了大量的getter,setter和DataMappers.除了做大量工作外,它似乎也违反了DRY.

我真的很感谢一些(链接)好的例子或更多关于它们如何组合在一起的信息.我正在努力提高我的架构和设计技巧.

model-view-controller activerecord domain-driven-design zend-framework dry

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

如何在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
查看次数