小编TiM*_*TER的帖子

没有脚本名称通过nginx/FastCGI传递给php-fpm

我在php-fpm上运行PHP 5.5/5.6实例没有任何问题(unix套接字和nginx).

今天我编译了PHP 7,并将其作为第三个PHP实例启动.虽然PHP 7实例的PHP 5.5/5.6实例的请求得到了很好的服务,但我得到了:

警告:pid 2582,fpm_request_check_timed_out(),第277行:[pool www0] child 2813,script''(request:"")执行超时(120.018160 sec),终止

在我的php-fpm日志文件中

[error] 1889#0:*4 recv()失败(104:对等连接重置)从上游读取响应头,客户端:xxx.xxx.xxx.20,server:localhost,request:"GET /info.php HTTP/1.1",上游:"fastcgi:// unix:/var/run/php70-fpm.sock:",主机:"xxx.xxx.xxx.21"

在我的nginx错误日志文件中.

我使用的fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name也适用于PHP 5.6实例.虽然PHP 7的脚本文件名似乎是空的.我在请求一个脚本/info.php.

使用php-fpm使用PHP 5.x和7.0之间有什么区别吗?


UPDATE

至少我不是唯一一个正面临这些问题的人.我在这里打开了一个错误报告:https://bugs.php.net/bug.php?id = 69850

还有一个非常相似(可能相同)的bug已在此处报告:https://bugs.php.net/bug.php?id = 69875(thx to @crypticツ)

更新2

尝试最新的alpha2.那里的错误是固定的.Unix套接字现在再次像魅力一样工作.

php fastcgi nginx

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

以非root身份访问GPIO(/ sys/class/gpio)

/sys/class/gpio只能访问为根默认.所以我喜欢新组root可以使用文件和目录gpio.为了达到这个目的,我添加了以下几行/sys/class/gpio(我在Debian上):

sudo chown root:gpio /sys/class/gpio/unexport /sys/class/gpio/export
sudo chmod 220 /sys/class/gpio/unexport /sys/class/gpio/export
Run Code Online (Sandbox Code Playgroud)

因此,这为所有/etc/rc.local组成员提供了写权限.所以他们现在可以导出和取消导销.

问题是他们在导出(ex gpio)之后无法读取/写入特定的pin文件,因为它们export再次归属.

我怎么能改变它们默认创建的unexport呢?我的意思是每次导出引脚时我都可以手动执行此操作.但那有点不舒服.

UPDATE

根据larsks的回答,我创建了缺少的规则文件.现在它部分有效:

-rwxrwx---  1 root gpio 4096 Jun 19 16:48 export
lrwxrwxrwx  1 root gpio    0 Jun 19 16:51 gpio17 -> ../../devices/soc/3f200000.gpio/gpio/gpio17
lrwxrwxrwx  1 root gpio    0 Jun 19 16:45 gpiochip0 -> ../../devices/soc/3f200000.gpio/gpio/gpiochip0
-rwxrwx---  1 root gpio 4096 Jun 19 16:45 unexport
Run Code Online (Sandbox Code Playgroud)

但是对于export我仍然得到/sys/class/gpio/gpio17:

-rw-r--r-- 1 root …
Run Code Online (Sandbox Code Playgroud)

bash chmod chown raspberry-pi raspberry-pi2

12
推荐指数
2
解决办法
8870
查看次数

检查对象是否已更改

是否有更原生的方式(来自内置函数)用较少的用户空间代码来检查对象属性值是否已更改而不是使用以下方法之一:

序列化方法

$obj = new stdClass(); // May be an instance of any class

echo $hashOld = md5(serialize($obj)) . PHP_EOL;

$obj->change = true;

echo $hashNew = md5(serialize($obj)) . PHP_EOL;

echo 'Changed: '; var_dump($hashOld !== $hashNew);
Run Code Online (Sandbox Code Playgroud)

结果如下:

f7827bf44040a444ac855cd67adfb502 (initial)
506d1a0d96af3b9920a31ecfaca7fd26 (changed)
Changed: bool(true)
Run Code Online (Sandbox Code Playgroud)

影子复制方法

$obj = new stdClass();
$shadowObj = clone $obj;

$obj->change = true;

var_dump($shadowObj != $obj);
Run Code Online (Sandbox Code Playgroud)

结果如下:

bool(true);
Run Code Online (Sandbox Code Playgroud)

两种方法都有效.但是与非用户区实现相比,两者都有缺点.第一个需要CPU进行序列化和散列,第二个需要内存来存储克隆.有些课程可能无法克隆.

PHP是否跟踪对象属性的更改?PHP没有公开一种方法来使用它吗?

php

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

选择新标签后,选择2:更新选项

我实现了一个标记系统,您可以从中选择现有标记或添加新标记.选择新标签后,它将持续使用AJAX调用.

为了达到这个目的,我使用了回调createTag和事件select2:select.因为我只想在选中它时创建标记,所以如果事件select2:select被触发,我会对此进行AJAX调用.

问题是我需要使用从将新标记保存到数据库得到的ID更新已创建的select2选项.什么是最干净的解决方案?

这就是我所拥有的:

$('select.tags').select2({
     tags: true,
     ajax: {
         url: '{{ path('tag_auto_complete') }}',
         processResults: function (data) {
             return {
                 results: data.items,
                 pagination: {
                     more: false
                 }
             };
         }
     },
     createTag: function (tag) {
         return {
             id: tag.term, // <-- this one should get exchanged after persisting the new tag
             text: tag.term,
             tag: true
         };
     }
 }).on('select2:select', function (evt) {
     if(evt.params.data.tag == false) {
         return;
     }

     $.post('{{ path('tag_crrate_auto_complete') }}', { name: evt.params.data.text }, function( data …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-select2 jquery-select2-4

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

session_unset()是否已弃用?

在PHP文档中session_unset()没有提示不推荐使用这个函数,所以我觉得使用它是没问题的.但后来我通读了关于session_destroy()我在哪里找到这个提示的文档:

注意: 仅对不使用$ _SESSION的旧版弃用代码使用session_unset().

我知道这个session_unset()函数是等价的$_SESSION = array();.那我现在该怎么用?为什么在一个站点上提示不推荐使用此函数,另一方面在关于函数本身的文档中没有弃用的注释.现在关于这个功能的真相是什么?

php session

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

禁用整个缓存以进行开发

我正在为Drupal 8开发一个新主题.我需要禁用Drupal中的所有缓存机制.我找到了twig缓存和CSS/JavaScript的配置,但没有找到Drupal的其他东西(比如.theme文件等).

我在这里找到了一些提示:

在第一个链接中,您会发现一些条目cache.以及在第二个链接中开始,如何停用后端缓存?

虽然如果我粘贴这两行:

$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml';
$settings['cache']['bins']['render'] = 'cache.backend.null';
Run Code Online (Sandbox Code Playgroud)

进入我的settings.phpDrupal会显示一条消息,指出页面出错.

drupal drupal-8

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

在CLI上执行脚本中止后执行代码

我的脚本在PHP中止后,我尝试执行一些最终代码.所以,假设我有这个PHP脚本:

while(true) {
    echo 'loop';
    sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

如果我用$ php script.php它执行脚本运行直到给定的执行时间.

现在我喜欢在脚本中止后执行一些最终代码.所以,如果我

  • 击中 Ctrl+C
  • 执行时间结束了

在这些情况下甚至有可能做一些清理工作吗?

我尝试过pcntl_signal但没有运气.也有,register_shutdown_function但只有在脚本成功结束时才会调用此方法.

UPDATE

我发现(thx到rch的链接)我以某种方式可以"抓住"事件:

pcntl_signal(SIGTERM, $restartMyself); // kill
pcntl_signal(SIGHUP,  $restartMyself); // kill -s HUP or kill -1
pcntl_signal(SIGINT,  $restartMyself); // Ctrl-C
Run Code Online (Sandbox Code Playgroud)

但是,如果我扩展我的代码

$cleanUp = function() {
    echo 'clean up';
    exit;
};

pcntl_signal(SIGINT, $cleanUp);
Run Code Online (Sandbox Code Playgroud)

$cleanUp如果我点击,脚本会继续执行,但不会尊重关闭中的代码Ctrl+C.

php command-line-interface

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

带逗号的标题值

根据 HTTP 规范,标头可能如下所示:

Header-Name=value1,value2,value3,...
Run Code Online (Sandbox Code Playgroud)

我尝试解析标头值并将它们存储为数组:

array('value1', 'value2', 'value3')
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。如果出现逗号,我可以只标记字符串。

但是我应该如何处理这样的标题:

Expires=Thu, 01 Dec 1994 16:00:00 GMT
Run Code Online (Sandbox Code Playgroud)

有一个逗号,但在标题具有的一个值中。哦,这很容易,我想并找出了规则:只有在逗号前后没有空格时才用逗号分隔。这样,两个示例都可以正确解析。

但是后来我遇到了这样的标题:

Accept-Encding=gzip, deflate
Run Code Online (Sandbox Code Playgroud)

现在?这是一个值array('gzip, deflate')还是两个值array('gzip', 'deflate')?对我来说,它们是两个独立的值,但我上面的规则不再适用。

是否有一个列表允许多次使用标题?所以我可以检查黑名单以确定逗号是否表示值分隔符?

http http-headers

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

DQL cannot resolve primary key through one-to-one relationship as parameter

I use a one-to-one relationship as an id for an entity:

Actor entity

$metadata->mapOneToOne([
    'fieldName' => 'user',
    'id' => true,
    'targetEntity' => AbstractUser::class,
    'inversedBy' => 'actor',
    'cascade' => ['all'],
    'joinColumns' => [
        [
            'name' => 'user_id',
            'referencedColumnName' => 'id',
            'nullable' => false,
        ]
    ],
]);
Run Code Online (Sandbox Code Playgroud)

and the other side:

AbstractUser entity

$metadata->mapField([
    'fieldName' => 'id',
    'type' => 'string',
    'length' => 36,
    'id' => true,
    'strategy' => 'none',
    'unique' => true,
]);

$metadata->mapOneToOne([
    'fieldName' => 'actor',
    'targetEntity' => Actor::class,
    'mappedBy' => …
Run Code Online (Sandbox Code Playgroud)

php doctrine doctrine-orm

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

在iOS 5.0/5.0.1上,使用SSL的ASIHTTPRequest失败

我正在使用ASIHTTPRequest v1.8.1来发出HTTPS请求.问题是它在iOS 5.0和5.0.1上不起作用,而在5.1和5.1.1上它可以正常工作.代码很简单:

__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:RemoteNotiURL]];
[request setPostValue:@"i" forKey:@"plat"];
[request setPostValue:token forKey:@"token"];
[request setValidatesSecureCertificate:NO];

[request setCompletionBlock:^{
    NSLog(@"done");
}];

[request setFailedBlock:^{
    NSLog(@"error = %@", [request error]);

}];

[request startAsynchronous];
Run Code Online (Sandbox Code Playgroud)

RemoteNotiURL是一个像https://xxx.example.com这样的URL

错误是:

error = Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date)" UserInfo=0x18460b0 {NSUnderlyingError=0x1853ab0 "The operation couldn’t be completed. (OSStatus error -9800.)", NSLocalizedDescription=A connection failure occurred: SSL problem (Possible causes may include …
Run Code Online (Sandbox Code Playgroud)

ssl https asihttprequest ios

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