php curlfile 中文名,php - PHP 7.2 CURLFile提供“无效的文件名”警告 - SO中文参考 - www.soinside.com...

我使用CURLFile对象(curl_file_create)时遇到问题。我尝试了很多方法,但无论我尝试什么,我最终都会在日志文件中获得PHP警告,并且我的cURL调用中省略了该文件。

首先,一些信息:

PHP 7.2

文件已经确认它们存在并且可由PHP / Apache读取

php-curl和相关的php库是最新的

这是一个对象内的片段,因此引用了$this。所有变量都正确加载。

这是我开始的另一个问题的延续,当缩小时,似乎与主要原始主题(mailgun)无关。如果您愿意,可以在此URL引用它,但我打算很快关闭该问题。 Mailgun Attachments with PHP cURL - No SDK

请注意代码块中我已经注释了尝试添加文件的其他几种变体 - 所有这些变体都会创建相同的警告/结果

代码块

$curl = curl_init();

$curlOpts = array(

CURLOPT_POST => 1,

CURLOPT_URL => $postUrl,

CURLOPT_TIMEOUT => 20,

CURLOPT_RETURNTRANSFER => 1,

CURLOPT_HTTPAUTH => CURLAUTH_BASIC,

CURLOPT_USERPWD => 'api:' . $this->apiKey

);

$postFields = array(

'from' => $email->from,

'to' => $email->to,

'subject' => $email->subject

);

if (strlen($email->cc) > 0) {

$postFields['cc'] = $email->cc;

}

if (strlen($email->bcc) > 0) {

$postFields['bcc'] = $email->bcc;

}

if (strlen($email->html) > 0) {

$postFields['html'] = $email->html;

} else {

$postFields['text'] = $email->text;

}

if (count($email->attachments) > 0) {

// Curl attachments for < PHP5.5 not supported

if (function_exists('curl_file_create')) {

$curlOpts[CURLOPT_SAFE_UPLOAD] = 1; // for < PHP 7

//$curlOpts[CURLOPT_HTTPHEADER] = array('Content-Type: multipart/form-data');

//$postFields['attachment'] = curl_file_create($email->attachments[0]);

for ($i = 1; $i <= count($email->attachments); $i++) {

$postFields['attachment[' . $i . ']'] = curl_file_create($email->attachments[$i - 1], 'text/csv', basename($email->attachments[$i - 1]));

//$postFields['attachment[' . $i . ']'] = curl_file_create('/var/www/sites/domain/contact.csv', 'text/csv', 'contact.csv');

//$postFields['attachment[' . $i . ']'] = curl_file_create('test.txt', 'text/plain', 'test.txt');

//$postFields['attachment[' . $i . ']'] = curl_file_create(realpath('test.txt'), 'text/plain', 'test.txt');

//$postFields['attachment[' . $i . ']'] = new \CURLFile($email->attachments[$i - 1]);

}

} else {

\D3DevelForms\Models\Error::CreateAndSaveSystemError(

$plugin,

\D3DevelForms\Common::ERROR_WARNING,

'PHP 5.5 or newer required for Mailgun Attachments',

\D3DevelForms\Models\Error::ERROR_CODE_API_MAILGUN_LOCAL_ERROR,

'You are using an outdated version of PHP. Email attachments via Mailgun will be ignored.');

}

}

$curlOpts[CURLOPT_POSTFIELDS] = $postFields;

$log->UpdateDebugLog('Mailgun API Options', $curlOpts);

curl_setopt_array($curl, $curlOpts);

$curl_response = curl_exec($curl);

$info = curl_getinfo($curl);

卷曲选项($curlOpts)

Array

(

[47] => 1

[10002] => https://api.mailgun.net/v3/devtester.devtest.com/messages

[13] => 20

[19913] => 1

[107] => 1

[10005] => api:APIKEY

[-1] => 1

[10015] => Array

(

[from] => Dev Tester

[to] => devemail@gmail.com

[subject] => Form Summary

[text] => My Text Content

[attachment[1]] => CURLFile Object

(

[name] => /var/www/path_to/my_file.csv

[mime] => text/csv

[postname] => my_file.csv

)

)

)

返回卷曲信息($info)

Array

(

[url] => https://api.mailgun.net/v3/devtester.devtest.com/messages

[content_type] => application/json

[http_code] => 200

[header_size] => 388

[request_size] => 312

[filetime] => -1

[ssl_verify_result] => 0

[redirect_count] => 0

[total_time] => 0.503718

[namelookup_time] => 0.004273

[connect_time] => 0.0932

[pretransfer_time] => 0.279756

[size_upload] => 1021

[size_download] => 105

[speed_download] => 208

[speed_upload] => 2026

[download_content_length] => 105

[upload_content_length] => 1021

[starttransfer_time] => 0.368725

[redirect_time] => 0

[redirect_url] =>

[primary_ip] => Y.Y.Y.Y

[certinfo] => Array

(

)

[primary_port] => 443

[local_ip] => X.X.X.X

[local_port] => 38636

)

更新:从命令行使用cURL进行测试时,它确实可以正常工作,包括当我将其作为apache进程运行时。

sudo -u apache curl -s --user 'api:APIKEY' \

https://api.mailgun.net/v3/devtester.devtest.com/messages \

-F from='Dev Tester ' \

-F to='devtester@gmail.com' \

-F subject='Hello' \

-F text='Testing some Mailgun awesomness!' \

-F attachment=@/var/www/path_to/my_file.csv

{

"id": "",

"message": "Queued. Thank you."

}

我在Apache日志中收到PHP警告,如下所示:

“PHP警告:curl_setopt_array():密钥附件的文件名无效[1]”

这很棘手,因为我已经确认了以下内容:

该文件存在

该文件可由Apache读取

文件路径不包含字母,数字,斜杠和连字符之外的任何字符

因为文件是在同一个线程中生成的,所以我尝试引用一个静态文件,但结果是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值