小编Bab*_*abu的帖子

PHP无需等待响应即可运行后台作业非阻塞模式与触发类型类似

目的

我的基本目标是使用Yii2 Web应用程序在PHP中实现异步触发器

我需要运行php批处理作业,但我不想在浏览器/ cron中等待完成这项工作.为了运行作业,我需要使用我的应用程序的不同文件

http://myapp/foojob.php 
Run Code Online (Sandbox Code Playgroud)

foojob.php应该异步调用许多php实例[每个实例承载一个作业]基于手头的可用工作.调用的时间限制(foojob.php)小于60sec.i需要在超过超时值之前触发新的php实例.

我提到并尝试过

  1. curl_multi - 我找不到非阻塞模式.
  2. fsock_open - 这可以通过发送Connection:Close to the call(但是fsock open在许多共享主机服务器上并不总是可用或它无法正常工作).你能建议我使用fsock传输的可靠解决方案吗?
  3. pcntl_exec -I还没有实时尝试,但实时统计显示45%的服务器禁用了该功能.我不知道原因.
  4. 流运 - 我不知道它是如何工作的?

我的问题:

  1. 非阻塞异步请求是否有任何可能的解决方案已经存在于git中以实现PHP?
  2. 如果我需要调查任何其他运输,请转介我
  3. 是否存在基于环境的智能切换传输机制(curl/fsock)?

编辑:

该应用程序是自托管产品.它将得到各种托管服务的工作.共享主机不允许/为其客户提供任何外部扩展.

php curl asynchronous nonblocking yii2

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

使用"INSERT ... ON DUPLICATE KEY UPDATE"插入多个记录

我的表结构

表:标记 在此输入图像描述

我的目标: 我想插入或更新条件的多个记录

我目前正在查询此查询

第一步

SELECT * FROM `marks` WHERE `student` =115 AND `param` =1
Run Code Online (Sandbox Code Playgroud)

第二步

if 
    records found by matching above criteria i just update record by my new values 
else
    insert new record into my table 
Run Code Online (Sandbox Code Playgroud)

它会正常工作.但我想减少代码并将其优化为单个查询.它可能与否?我在MySQL docs上发现了这个INSERT ... ON DUPLICATE KEY UPDATE.如果这是一个解决方案.我怎么能通过查询实现?

注意:我正在使用Yii框架 .来自Yii的建议也欢迎

已编辑: 此查询不会更新行.但逃避插入工作正常

INSERT INTO marks(`student`,`param,mark`,`created`,`lastmodified`,`status`) 
VALUES 
(11,30,10,'00-00-00 00:00:00','00-00-00 00:00:00','U')
ON DUPLICATE KEY UPDATE `mark`=VALUES(`mark`)
Run Code Online (Sandbox Code Playgroud)

php mysql insert-update yii

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

标签 统计

php ×2

asynchronous ×1

curl ×1

insert-update ×1

mysql ×1

nonblocking ×1

yii ×1

yii2 ×1