macos+docker 本机环境,PHP 项目,代码跑到阿里云 OSS SDK 的 uploadFile 方法出问题,现象是类似直接卡死,容器内的网站也直接访问不了了,转圈圈,restart 容器恢复访问,但问题依旧,本人菜鸡,追了一宿的代码大概得出以下测试结果,望大神赐教
ps:这项目代码在原 windows 本机环境和线上 centos 环境都没任何问题。
// 首先第三个参数就是传本地文件路径,写成下面这样,$_FILES["file"]['tmp_name'] 就会导致容器好像卡死,这个值一般是 /tmp/phpXXXX
// 而我进入容器手动在 /tmp 目录下创建一个文件比如 touch test,然后第三个参数写 /tmp/test,代码就可以跑通,我就很是纳闷。
$res = $ossClient->uploadFile($config['bucket'], $ossFileName, $_FILES["file"]['tmp_name']);
[20-Feb-2021 20:05:32] WARNING: [pool www] child 9, script '/www/ShengXin/CRM/index.php' (request: "POST /index.php") executing too slow (3.063820 sec), logging
[20-Feb-2021 20:05:32] NOTICE: child 9 stopped for tracing
[20-Feb-2021 20:05:32] NOTICE: about to trace 9
[20-Feb-2021 20:05:32] ERROR: pread() failed: I/O error (5)
[20-Feb-2021 20:05:32] NOTICE: finished trace of 9
刚开始用 docker 做本地环境,菜鸡求教,本菜分析两个原因,一个是文件目录权限的问题很大,很小是 curl 的问题,望大神指条明路
1
huixia0010 2021-02-21 10:30:27 +08:00
PHP 触发慢查询了。
|
2
tlerbao OP @huixia0010 大神你好,所以如何解决呢,还是没太明白慢查询是啥。
|
3
crystom 2021-02-21 11:26:13 +08:00
看看存储空间满了没,给 docker 分配的内存和磁盘大点
|
4
imnpc 2021-02-21 13:58:16 +08:00
根据猜测 大概是 docker 访问阿里云服务器有问题 不知道改下 docker 里面的 DNS 是不是会好
|
5
imnpc 2021-02-21 13:59:48 +08:00
在 docker 里面执行下代码
cat >/etc/resolv.conf <<EOF nameserver 114.114.114.114 nameserver 8.8.8.8 EOF |
6
chotow 2021-02-21 14:14:06 +08:00
1. 对比一下 $_FILES["file"]['tmp_name'] 和你自己创建的 /tmp/test 的权限。
2. 移动原文件(如 move_uploaded_file ),然后再写死 uploadFile 第三个参数看看。 3. 分别上传大文件和小文件,观察小文件能否成功。 |
7
tlerbao OP |
8
tlerbao OP @chotow 感谢回复
首先我在执行 uploadFile 方法之前用获取到 $_FILES["file"]['tmp_name'] 值,然后去 /tmp 目录 ls -a,发现并没有此文件。 但是我在 uploadFile 方法之前用 file_get_contents($file['tmp_name']),又可以打开这个文件获取到内容,就很奇怪。 |
9
chotow 2021-02-21 14:55:11 +08:00
@tlerbao #8
ls 没看到文件的可能原因应该如 php 官方文档所说:「如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。」 |
10
mahone3297 2021-02-21 16:53:34 +08:00
>更改了一下 SDK 的依赖包版本
对比一下,差异在哪里 |