【发布时间】:2021-09-08 00:27:18
【问题描述】:
我正在做一个
curl -d @data.csv myserver.com 将数据发布到我的 linux 服务器。使用 laravel 我的路由会将 POST 请求路由到我的 Controller.php 中的一个函数:
public function endpoint(Request $request)
{
$handle = $request->file('data.csv');
$use = fopen($request->file('data.csv'), "r");
}
现在错误日志返回:[2021-06-24 15:44:55] production.ERROR: fopen(): Filename cannot be empty {"exception":"[object] (ErrorException(code: 0): fopen() --> 所以预期的 data.csv 没有到达,请求似乎是空的。当然,我先用谷歌搜索了这个问题。网上的所有答案都说这是由于临时存储上传文件的文件夹的权限错误,但那在哪里?做一个
$temp_file = tempnam(sys_get_temp_dir(), 'Tux'); echo $temp_file; echos /tmp/TuxWk8llX 这让我相信默认的 tmp 目录是 /tmp/。我的 php.ini 还说 /tmp/ 是这个上传目录(见下文)。但是做一个lson /tmp/ 表明它拥有所有权限:drwxrwxrwt. 1 root root 57 Jun 24 13:28 tmp
那么为什么请求没有通过,有什么想法吗?在此先感谢,我对此感到非常困惑! :)
PS:php.ini中的; sys_temp_dir = "/tmp"可能会导致问题吗?
**php.ini config file**
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir = /tmp
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 200M
; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
; Directory where the temporary files should be placed.
; Defaults to the system default (see sys_get_temp_dir)
; sys_temp_dir = "/tmp"
【问题讨论】:
-
好的,您能解释一下如何使用它吗?
public function endpoint(Request $request) { $path = $request->path(); \Log::info($path); }给了我这个日志:[2021-06-24 16:21:07] production.INFO: /。如果这是真的,那么存储数据的默认目录是 / 我会怀疑应用程序是否有足够的权限来存储数据,对吧? -
好的,所以
public function endpoint(Request $request) { $info = $request->getContent(); \Log::info($info); }给出以下日志:[2021-06-24 16:29:29] production.INFO:所以那里似乎什么都没有。