小编Cou*_*les的帖子

安装MariaDB - 未满足的依赖项,mariadb-server-5.5

我正在尝试在Ubuntu 12.04 LTS上安装MariaDB.

我按照https://askubuntu.com/questions/64772/how-to-install-mariadb和MariaDB.org 提供的说明进行选择下载.

最后一步是sudo apt-get install mariadb-server返回:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 mariadb-server : …
Run Code Online (Sandbox Code Playgroud)

ubuntu apt-get mariadb

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

节点Redis - 使用EX和NX设置?

Redis建议使用带有可选参数的SET作为锁定机制的方法.即"SET lock 1 EX 10 NX"仅在它不存在时才设置锁定,并且在10秒后过期.

我正在使用Node Redis,它有一个set()方法,但我不知道如何传递其他参数以使密钥过期,如果它已经存在则不会被创建,或者即使它是可能的.

也许我必须使用setnx()和expire()作为单独的调用?

locking redis node.js

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

打开XDebug的Windows防火墙

这似乎应该超出简单,所以我讨厌问.但我尝试配置Windows防火墙以允许XDebug在端口9000上连接到PHPStorm但没有成功.

XDebug在Vagrant Box上具有专用网络连接 - 因此主机具有虚拟网络适配器.Vagrant是192.168.33.10,主机PC是192.168.33.1.

禁用Windows防火墙后,XDebug将连接到PHPStorm.但我显然不想让我的防火墙关闭.

所以我尝试使用以下入站规则设置在Windows防火墙中打开一个端口:

  • 一般
    • 启用:检查
    • 操作:允许连接
  • 计划和服务
    • 所有符合指定条件的程序:已检查
    • 服务
      • 适用于所有计划和服务:已检查
  • 协议和端口
    • 协议类型:TCP
    • 本地端口:特定端口:9000
    • 远程端口:所有端口
  • 范围
    • 本地IP地址
      • 任何IP地址:已选中
    • 远程IP地址
      • 任何IP地址:已选中
  • 高级
    • 简介
      • 域名:已检查
      • 私人:已检查
      • 公开:检查
    • 接口类型
      • 所有接口类型:已选中
    • 边缘遍历:块边缘遍历

但它不能让XDebug连接到PHP风暴.我也尝试将协议设置为UDP.而且我知道如果这个规则确实有效,那就太过开放了(我可以收紧范围),但目前我只是想在收紧之前看到它有效.

windows firewall xdebug

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

如何使用Symfony控制台识别是否提供了没有值的选项?

使用Symfony3控制台,如何判断用户何时提供了一个选项,但是在没有值的情况下提供了它?而不是根本不提供选项?

例如,采用以下控制台配置.

<?php

class MyCommand extends \Symfony\Component\Console\Command\Command
{
    // ...

    protected function configure()
    {
        $this->setName('test')
            ->setDescription('update an existing operation.')
            ->addOption(
                'option',
                null,
                InputOption::VALUE_OPTIONAL,
                'The ID of the operation to update.'
            );
    }
}
Run Code Online (Sandbox Code Playgroud)

命令帮助将说明选项--option[=OPTION],所以我可以通过以下方式调用它.

bin/console test
bin/console test --option
bin/console test --option=foo
Run Code Online (Sandbox Code Playgroud)

但是,$input->getOption()NULL在前两种情况下返回.我预计在第二种情况下它会返回TRUE,或者表示提供选项的东西.

所以我不知道如何识别根本没有提供的选项的差异,它是提供但没有值.

如果没有办法区分,那么用例是InputOption::VALUE_OPTIONAL什么?

php symfony symfony-console

8
推荐指数
3
解决办法
1514
查看次数

如何捕获生成器抛出的异常并恢复迭代?

我有一个生成器,它将值的集合传递给方法并生成结果。调用的方法可能会返回异常。发生这种情况时,我希望异常转到调用生成器来处理异常的代码,然后继续循环生成器。

为了说明这一点,下面是一个生成器的示例,它将产生1、抛出一个\Exception,然后产生3

/** @var \Generator $gen */
$gen = function () {
    for ($i = 1; $i <= 3; $i++) {
        if ($i == 2) {
            throw new \Exception('Exception thrown for 2');
        }

        yield $i;
    }
};
Run Code Online (Sandbox Code Playgroud)

这是我尝试运行此代码的示例,以便我可以让它产生结果3

$g = $gen();

var_export($g->current());
echo "\n";

try {
    $g->next();
    var_export($g->current());
    echo "\n";
} catch (\Exception $e) {
    echo $e->getMessage() . "\n";
}

try {
    $g->next();
    var_export($g->current());
    echo "\n";
} catch (\Exception $e) {
    echo $e->getMessage() …
Run Code Online (Sandbox Code Playgroud)

php exception generator

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

使用自己的异常处理程序时保留 Xdebug 异常处理

我在 PHP 项目中编写了自己的异常和错误处理程序。

但是,在进行开发时,除了我自己的处理之外,我还想让 XDebug 执行正常的“异常”和“错误”处理。

我发现如果我自己的错误处理程序返回 FALSE,我可以很容易地让 XDebug 继续执行“错误”处理。但我找不到一种方法来通过“异常”处理获得类似的效果。

我希望我可以手动调用 XDebug 函数。xdebug_print_function_stack() 是我能看到的最接近的东西,但它不会给出触发异常的真实堆栈跟踪。

php exception xdebug

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

如何使用 Mockery 在第 N 次调用模拟方法时抛出异常

我需要测试我编写的某些代码在多次调用另一个类上的方法时的行为方式,其中一次调用将导致抛出异常。

我正在使用Mockery来模拟可能引发异常的类。

所以在我的情况下,该方法将被调用三次,我需要它在第二次抛出异常。

这是我的意图的例子,但它不起作用。

$mock = \Mockery::mock();
$mock->shouldReceive('fetch')
    ->andReturnUsing(
        function () {return true;},
        function () use ($e) {throw new \Exception();},
        function () {return false;}
    );
Run Code Online (Sandbox Code Playgroud)

我的印象是,上述内容可能适用于Asserting that mock throws exception · Issue #308 · mockery/mockery 中的响应。

但是,在实践中,以这种方式抛出异常会导致 Mockery 捕获异常并抛出自己的BadMethodCall异常。

php unit-testing mockery

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

apt-get:识别包的所有旧版本号?

我需要在Debian上安装PHP 5.3.如果我要定期安装PHP,我会得到5.4版.

我知道我可以运行apt-get install <package-name>=<package-version-number>安装特定版本.但我不知道PHP 5.3的确切包版本号是什么.

我跑了apt-cache showpkg php5,apt-cache madison php5但他们只列出了当前的版本.

如何识别用于安装PHP 5.3的正确版本号?

php debian apt

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

使用与Doctrine Master/Slave连接建立的PDO连接

我在一个预先存在的软件中采用了Doctrine,并且希望Doctrine与遗留代码共享相同的PDO连接.

我知道你可以告诉Doctrine使用如此建立的连接:

$em = EntityManager::create(['pdo' => $pdo], $ormConfiguration);
Run Code Online (Sandbox Code Playgroud)

我无法找到主/从连接的正确组合.这是我期望的工作:

$em = EntityManager::create(
    [
        'wrapperClass' => \Doctrine\DBAL\Connections\MasterSlaveConnection::class,
        'master' => ['pdo' => $pdoMaster],
        'slaves' => [
            ['pdo' => $pdoSlave]
        ]
    ],
    $ormConfiguration
);
Run Code Online (Sandbox Code Playgroud)

这会生成以下错误:

带有消息的未捕获异常'Doctrine\DBAL\DBALException'如果没有为DriverManager :: getConnection()提供PDO实例,则必须使用选项'driver'或'driverClass'.

通过代码阅读,看起来不支持使用Master/Slave与Doctrine建立连接.但我不确定.大多数文档都没有详细介绍使用已建立的连接.

php pdo doctrine-orm

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

Doctrine 返回 null 代替 EntityNotFoundException

我的数据库中的 FK 已损坏,如果我加载一个实体并请求相关实体 Doctrine 将抛出\Doctrine\ORM\EntityNotFoundException

对于有问题的实体,我更希望在 FK 损坏的地方返回 NULL 而不是抛出异常。这是因为异常发生在 Twig 模板内,我希望 Twig 在这种情况下不必处理异常。

以下是配置示例。

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="Foo\Click" table="clicks">
        <id name="id" type="bigint" column="click_id">
            <generator strategy="IDENTITY"/>
        </id>
        <!-- .. -->
        <many-to-one field="visitor" target-entity="Foo\Visitor" fetch="LAZY">
            <join-columns>
                <join-column name="visitor_id" referenced-column-name="visitor_id"/>
            </join-columns>
        </many-to-one>
    </entity>

    <entity name="Foo\Visitor" table="visitors" read-only="true">
        <id name="visitorId" type="integer" column="visitor_id">
            <generator strategy="IDENTITY"/>
        </id>
        <!-- ... -->
        <one-to-one field="firstClick" target-entity="Foo\Click" fetch="LAZY">
            <join-columns>
                <join-column name="click_id" referenced-column-name="click_id"/>
            </join-columns>
        </one-to-one>
    </entity>
</doctrine-mapping>
Run Code Online (Sandbox Code Playgroud)

以下是预期结果的示例,其中点击作为访客 ID,但不存在具有该 ID 的访客记录。在这种情况下,我宁愿不必将逻辑包装在 Try/Catch …

php entity doctrine-orm

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