小编Iva*_*tov的帖子

是否有PHP函数或变量给出本地主机名?

当脚本在Apache下运行时,我将$_SERVER['SERVER_NAME']值插入到报告电子邮件的错误中.

但是,如果一个Web脚本叉一个"工人"的工作有nohup php ...,$_SERVER['SERVER_NAME']显示为空在那里.因此,如果发生错误,则报告没有主机名.

我可以通过PHP可靠地获取主机名,而无需调用Unix hostname命令吗?

php hostname

5
推荐指数
1
解决办法
7930
查看次数

在Zend_Test工具中执行Zend Framework控制器时设置正确的InvokeArg

根据邮件列表讨论,访问Zend MVC控制器中的应用程序资源的推荐方法是:

$this->getInvokeArg('bootstrap')->getResource('foo');
Run Code Online (Sandbox Code Playgroud)

这适用于生产(浏览到相应的网页时).但是,在测试包含此代码的控制器操作时Zend_Test_PHPUnit_ControllerTestCase,我得到:

PHP致命错误:在第12行的.../application/controllers/IndexController.php中的非对象上调用成员函数getResource()

在介绍那个getInvokeArg东西之前,测试运行得很好.问题是,如何在测试工具中使用"推荐"方式访问资源?

刚检查:$this->getFrontController()->getParam('bootstrap')->getResource('foo')也不起作用.

更新:我确实调用了应用程序引导程序,phpunit --bootstrap ./scripts/application_bootstrap.php ...我知道它执行正常.

我有:

$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap();
Run Code Online (Sandbox Code Playgroud)

php unit-testing zend-framework

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

是否可以在没有清理的情况下允许动态SQL?

我在PHP项目上的合作伙伴反对我总是在动态SQL中清理整数值的做法.我们尽可能使用参数化查询.但是对于UPDATE和DELETE条件,Zend_Db_Adapter需要一个非参数化的SQL字符串.这就是为什么我,即使没有想到,总是写下这样的东西:

$db->delete('table_foo', 'id = ' . intval($obj->get_id()));
Run Code Online (Sandbox Code Playgroud)

这是等效的,但是(我已检查过ZF源代码)的更短版本:

$db->delete('table_foo', $db->qouteInto('id = ?', $obj->get_id(), 'INTEGER'));
Run Code Online (Sandbox Code Playgroud)

我的伙伴强烈反对这一点intval(),说如果$objID为null(该对象尚未保存到DB),我将不会注意到错误,并且DB操作将以静默方式执行.这就是他实际发生的事情.

他说,如果我们清理所有HTML表单输入,那么整数ID就不可能进入'; DROP TABLE ...',或' OR 1 = 1'或者另一个讨厌的值,并插入到我们的SQL查询中.因此,我只是偏执,使我们的生活变得更加复杂."不要再相信$_SESSION价值了"他说.

但是,对于字符串值条件,他同意:

$db->update->(
    'table_foo',
    $columns,
    'string_column_bar = ' . $db->qoute($string_value))
);
Run Code Online (Sandbox Code Playgroud)

我没有证明他错了,他没有证明我错了.你能做到吗?

php sql security zend-framework

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

使用PHP中的对象函数调用链接构造函数

有谁知道在PHP的下一个版本中是否可以使用以下表达式?

(new A())->a();    // Causes a syntax error
Run Code Online (Sandbox Code Playgroud)

我觉得非常讨厌,目前必须写2行而不是1行:

$c = new A();
$c->a();
Run Code Online (Sandbox Code Playgroud)

php

4
推荐指数
2
解决办法
1450
查看次数

我们为什么要在PHP中使用静态调用?

为什么我们要在PHP5中使用静态变量或静态调用静态方法?也许是为了提高性能?

php oop static

4
推荐指数
2
解决办法
585
查看次数

单元测试分离

这个问题与PHPUnit有关,虽然它应该是一个全局的xUnit设计问题.

我正在为一堂课写一个单元测试用例Image.

这个类的方法之一是setBackgroundColor().

我需要为此方法测试4种不同的行为,

  1. 试图设置无效的背景颜色.将测试多个无效参数.
  2. 尝试使用短手RGB阵列设置有效的背景颜色,例如 array(255,255,255)
  3. 尝试使用标准RGB数组设置有效的背景颜色,例如array('red' => 255, 'green' => 255, 'blue' => 255)(这是GD功能的输出格式imagecolorsforindex())
  4. 尝试使用透明常量设置有效的背景颜色 IMG_COLOR_TRANSPARENT

目前,我已将所有这些包含在我的测试用例中的一个测试中testSetBackgroundColor(),但是我感觉这应该是4个单独的测试,因为测试变得很长并且做了很多.

我的问题是,我该怎么办?我是否将所有这些封装到Image测试用例的1个测试中,或者将上面的内容拆分为单独的测试,例如,

  • testSetBackgroundColorErrors
  • testSetBackgroundColorShorthandRGB
  • testSetBackgroundColorRGB
  • testSetBackgroundColorTransparent

我在这里提出了有问题的测试http://pastebin.com/f561fc1ab.

谢谢

php phpunit unit-testing design-patterns

4
推荐指数
1
解决办法
175
查看次数

在数据库中建模1到1..n的关系

您如何为客人关系建模预订酒店房间(如果重要的话,在PostgreSQL中)?一个房间可以有几个客人,但至少有一个.

当然,人们可以通过外键将客人与预订联系起来booking_id.但是,如何在DBMS级别强制执行一个房间必须至少有一个访客?

可能是不可能的?

database postgresql

3
推荐指数
1
解决办法
2640
查看次数

Clojure无法在OS X上打印非ASCII字符

我在Mac OS X 10.6.4上使用Homebrew包管理系统安装了Clojure 1.2.0.运行:

$ clj -e '(println "??????? ????\n")'
Run Code Online (Sandbox Code Playgroud)

在终端中导致:

??????? ????
Run Code Online (Sandbox Code Playgroud)

在同一终端运行时:

$ php -r 'echo "??????? ????\n";'
Run Code Online (Sandbox Code Playgroud)

正确显示西里尔文本.

运行时效果相同 $ clj <some .clj file in UTF-8 encoding>

这是一个已知问题吗?Java Runtime相关?我认为在这一点上语言最终得到了正确的Unicode.

java macos clojure character-encoding

3
推荐指数
1
解决办法
371
查看次数

在couchdb中使用不同的键发出两次doc

假设我有一个用couchDB保存的文档,文档看起来像这样:

{
   "email": "lorem@gmail.com",
   "name": "lorem",
   "id": "lorem",
   "password": "sha1$bc5c595c$1$d0e9fa434048a5ae1dfd23ea470ef2bb83628ed6"
}
Run Code Online (Sandbox Code Playgroud)

我希望能够通过'id'或'email'查询文档.因此,当我将其保存为视图时,我会这样写:

db.save('_design/users', {
    byId: {
        map: function(doc) {
            if (doc.id && doc.email) {
                emit(doc.id, doc);
                emit(doc.email, doc);
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

然后我可以这样查询:

db.view('users/byId', {
    key: key
}, function(err, data) {
    if (err || data.length === 0) return def.reject(new Error('not found'));
    data = data[0] || {};
    data = data.value || {};

    self.attrs = _.clone(data);
    delete self.attrs._rev;
    delete self.attrs._id;

    def.resolve(data);
});
Run Code Online (Sandbox Code Playgroud)

它工作得很好.我可以通过id或加载数据email.但我不确定我是否应该这样做.

我有另一个解决方案,通过保存相同的文档与两个不同的视图,如,byIdbyEmail,但这样我保存相同的文档两次,显然它将花费数据库的空间. …

couchdb view node.js cradle

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

模式匹配嵌套的联合类型

我正在计算一个倒数/倒计时器.设置原始日期后,计时器将显示自 - 以来经过的时间,或者保持到原始日期为止.

type OriginDefined
    = Up Date
    | Down Date


type Origin
    = OriginDefined
    | OriginUndefined


type Model
    = Tick OriginDefined
    | Edit Origin
Run Code Online (Sandbox Code Playgroud)

因此,只有在定义了原始日期时,计时器才会打勾.编辑原点时,可能先前已定义或未定义.

现在我需要一个函数来返回defaultValue日期输入,当我们处于Edit模式时.

dateInputDefaultValue : Origin -> String
dateInputDefaultValue origin =
    case origin of
        OriginUndefined ->
            ""

        OriginDefined ->
            ...
Run Code Online (Sandbox Code Playgroud)

在这里,我努力将origin进一步构造为一个Up date或多个Down date.在case表达式的第二个分支中,编译器拒绝将其origin视为更具体而不仅仅是一个Origin.

这是一个Ellie https://ellie-app.com/3zKCcX87wa1/0

我应该如何处理这样的模型?我应该以不同的方式建模吗?

algebraic-data-types elm

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

如何使用配置数组初始化Zend_Form_Element_Select?

我试过了:

$form->addElement(
    'select',
    'salutation',
    array(
        'required' => true,
        'options' => array(
            'Mr.' => 'Mr.',
            'Mrs.' => 'Mrs.',
            'Ms.' => 'Ms.',
        ), 
    )
);
Run Code Online (Sandbox Code Playgroud)

然后我print_r()编辑了表格,称呼的选项是空的.有人知道正确的咒语吗?据我所知,没有Zend元素配置格式的文档.

html php zend-framework

0
推荐指数
1
解决办法
4627
查看次数