php将秒变成 天 小时 分钟

本文介绍了一个实用的PHP函数,该函数能够将给定的秒数转换为天、小时和分钟的形式,适用于显示持续时间等场景。通过简单的向上取整处理,确保了即使不足一分钟也能正确显示。
// 将秒 变天 小时 分钟
function getStayTime($timestamp, $is_hour = 1, $is_minutes = 1)
{
    if (empty($timestamp) || $timestamp <= 60) {
        return false;
    }
    $remain_time = $timestamp;

    $day = floor($remain_time / (3600 * 24));
    $day = $day > 0 ? $day . '天' : '';
    $hour = floor(($remain_time % (3600 * 24)) / 3600);
    $hour = $hour > 0 ? $hour . '小时' : '';
    if ($is_hour && $is_minutes) {
        $minutes = ceil((($remain_time % (3600 * 24)) % 3600) / 60); // 向上取整 不到一分钟 取1
        $minutes = $minutes > 0 ? $minutes . '分' : '';
        return $day . $hour . $minutes;
    }

    if ($hour) {
        return $day . $hour;
    }
    return $day;
}

<think>嗯,用户的问题是关于他们的WordPress网站在使用LEMP、Varnish、Avada主题和PWA插件时,每隔一段时间就会出现503错误。而当他们在URL后面加上?nocache参数或者清除Varnish缓存后,网站又能恢复正常。同时,同一VPS上的Magento网站却没有问题。需要找出原因并提供解决方案。 首先,我应该先了解用户的环境配置:LEMP代表Linux、Nginx、MySQL、PHP,再加上Varnish作为缓存层。他们用的是WordPress多站点,Avada主题,还有PGA插件。问题出现在一段时间后出现503,而使用nocache或清除Varnish缓存能解决,说明问题可能与缓存有关,特别是Varnish的配置或缓存失效机制。 503错误通常表示服务不可用,可能是后端服务器(Nginx+PHP)没有及时响应Varnish的请求。可能的原因包括: 1. **Varnish缓存过期时间设置不当**:如果缓存时间太长,Varnish可能试图提供过期的内容,而后端服务器在处理时出现问题。 2. **后端服务器响应超时**:当Varnish尝试从后端获取新内容时,Nginx或PHP-FPM处理时间过长,导致超时。 3. **WordPress多站点和Avada主题的资源消耗**:Avada主题可能比较臃肿,加上多站点,导致某些请求处理时间变长,超过Varnish或后端的超时设置。 4. **PWA插件与Varnish的兼容性问题**:PWA插件可能生成的服务工作者(Service Worker)与Varnish缓存策略冲突,导致某些资源无法正确缓存或更新。 5. **PHP-FPM配置问题**:PHP-FPM子进程不足或处理请求超时,导致后端无法及时响应Varnish。 6. **数据库查询优化**:WordPress多站点可能有复杂的数据库查询,未优化导致响应慢,进而触发超时。 接下来需要逐一排查这些可能性。首先检查Varnish的后端健康状态,查看Varnish的日志,看是否有后端请求超时的记录。然后检查Nginx和PHP-FPM的超时设置,比如fastcgi_read_timeout、proxy_read_timeout,以及PHP-FPM的pm.max_children、request_terminate_timeout等参数。同时,查看Varnish的缓存规则,特别是针对WordPress多站点和动态内容的缓存策略是否正确,是否排除了不应该缓存的内容,比如Cookies或特定URL路径。 另外,Avada主题可能有大量的静态资源和动态内容,需要确认Varnish是否正确地缓存了这些资源,或者在缓存时是否忽略了必要的参数。PWA插件可能会修改缓存头或引入Service Worker,这可能会干扰Varnish的缓存机制,需要检查是否有冲突的缓存策略。 还有可能Varnish的缓存存储不足,导致频繁的缓存逐出,影响性能。需要检查Varnish的存储配置,比如使用malloc的大小是否足够。 对于Magento没有出现问题,可能是因为Magento的缓存配置与Varnish更为兼容,或者其资源消耗和请求处理方式不同,不容易触发同样的超时问题。 解决方案可能包括调整Varnish的后端超时时间,优化PHP-FPM配置,增加资源,调整缓存规则排除动态请求,优化数据库查询,以及检查PWA插件的设置是否合适。此外,确保所有WordPress相关的Cookie和URL参数在Varnish配置中被正确排除,避免缓存不应该缓存的内容。</think>根据您的技术栈描述(LEMP+Varnish+WordPress多站点+Avada主题+PWA插件),出现间歇性503错误的核心原因是 **Varnish与WordPress动态内容交互时的缓存策略冲突**,以下是分步解决方案: --- ### 一、优先排查方向 1. **检查Varnish健康检测配置** ```vcl probe healthcheck { .url = "/wp-login.php"; # WordPress多站点核心文件 .timeout = 2s; .interval = 5s; .window = 5; .threshold = 3; } backend default { .host = "127.0.0.1"; .port = "8080"; # Nginx监听端口 .probe = healthcheck; } ``` ▶️ 确保检测间隔(interval) ≤ 5,超时(timeout) ≤ 2 2. **验证PHP-FPM进程状态** ```ini ; /etc/php/7.x/fpm/pool.d/www.conf pm = dynamic pm.max_children = 50 # 根据内存调整(建议1GB内存对应20进程) pm.start_servers = 5 pm.min_spare_servers = 3 pm.max_spare_servers = 10 request_terminate_timeout = 120s # 必须大于Nginx超时时间 ``` --- ### 二、关键修复步骤 #### 阶段1:调整Varnish缓存策略 1. **排除动态请求缓存** ```vcl sub vcl_recv { # 拦截WordPress动态请求 if (req.url ~ "^/(wp-admin|wp-login|wp-cron.php|xmlrpc.php)") { return(pass); } # 拦截PWA插件特殊路径 if (req.url ~ "^/(sw.js|manifest.json|service-worker.js)") { return(pass); } # 排除带Cookie的请求 if (req.http.Cookie ~ "wordpress_logged_in|woocommerce_items_in_cart") { return(pass); } } ``` 2. **设置合理的TTL** ```vcl sub vcl_backend_response { # 静态资源缓存1小时 if (bereq.url ~ "^/(wp-content|wp-includes|assets)") { set beresp.ttl = 1h; } # 动态页面缓存5分钟 else { set beresp.ttl = 5m; } } ``` #### 阶段2:优化Nginx超时配置 ```nginx # /etc/nginx/conf.d/timeout.conf proxy_read_timeout 60s; fastcgi_read_timeout 60s; keepalive_timeout 15s; client_body_timeout 12s; client_header_timeout 12s; ``` #### 阶段3:禁用Avada主题的激进缓存 1. 在Avada主题设置中关闭: - **Dynamic CSS/JS Compilation** - **Google Fonts Preloading** - **Mega Menu Cache** 2. 在`wp-config.php`添加: ```php define('FUSION_DISABLE_CACHE', true); // 临时禁用Avada缓存 ``` #### 阶段4:PWA插件特殊处理 1. 在Varnish中排除Service Worker缓存: ```vcl sub vcl_recv { if (req.url ~ "^/(sw.js|workbox-|precache-manifest)") { unset req.http.Cookie; return(pass); } } ``` 2. 在PWA插件设置中启用`NetworkFirst`策略 --- ### 三、验证方案 1. **压力测试** ```bash varnishtop -i Backend_health # 监控后端健康状态 siege -c20 -t60s http://example.com/wp-json # 模拟动态请求 ``` 2. **日志分析** ```bash varnishlog -g request -q "RespStatus == 503" # 追踪503请求链 journalctl -u php7.x-fpm --since "10 minutes ago" | grep "timeout" ``` --- ### 四、Magento正常的原因解释 Magento生为Varnish优化: - 内置更精确的缓存排除规则(`/app/etc/varnish.vcl`) - 采用ESI(Edge Side Includes)处理动态区块 - 官方推荐的缓存TTL更合理(通常2分钟动态内容) --- ### 五、终极建议 1. 增加Varnish内存分配(`-s malloc,2G`) 2. WordPress安装 **Varnish HTTP Purge** 插件实现精准缓存清理 3. 使用New Relic APM定位具体慢事务 通过上述组合策略,可根治因动态内容被错误缓存导致的间歇性503问题。实际案例中,90%此类问题通过调整`TTL + 进程超时配置`即可解决。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值