PHP 7.2 CURLFile da una advertencia de "nombre de archivo no válido"

Tengo un problema al usar el objeto CURLFile curl_file_create). He intentado varios enfoques, pero no importa lo que intente, termino recibiendo una advertencia de PHP en los archivos de registro y el archivo se omite de mi llamada cURL.

Primero, alguna información:

PHP 7.2e ha confirmado que @Files existen y PHP / Apache puede leerlos php-curl y las bibliotecas php relacionadas están actualizadas Este es un fragmento de un objeto, por lo tanto, las referencias a$this. Todas las variables se están cargando correctamente.Esta es una continuación de otra pregunta que comencé que, cuando se reduce, parece no estar relacionada con el tema original primario (mailgun). Puede hacer referencia a esta URL si lo desea, pero tengo la intención de cerrar esa pregunta en breve. @ Archivos adjuntos de correo con PHP cURL - Sin SDKNota en el bloque de código donde he comentado varias otras variantes de intentar agregar el archivo; todas ellas crean la misma advertencia / resultado

Code Block

$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);

Curl Opciones $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 <[email protected]>
            [to] => [email protected]
            [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
                )

        )

)

Curl Información devuelta $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
)

Update: cuando se prueba con cURL desde la línea de comandos, funciona según lo previsto, incluso cuando lo ejecuto como unapache proceso.

sudo -u apache curl -s --user 'api:APIKEY' \
    https://api.mailgun.net/v3/devtester.devtest.com/messages \
    -F from='Dev Tester <[email protected]>' \
    -F to='[email protected]' \
    -F subject='Hello' \
    -F text='Testing some Mailgun awesomness!' \
    -F attachment=@/var/www/path_to/my_file.csv
{
    "id": "<[email protected]>",
    "message": "Queued. Thank you."
}

Recibo una advertencia de PHP en los registros de Apache, que aparece de la siguiente manera:

"Advertencia de PHP: curl_setopt_array (): nombre de archivo no válido para el adjunto de clave [1]"

Esto es complicado porque he confirmado lo siguiente:

El archivo exist El archivo es legible por ApacheLa ruta del archivo no incluye ningún carácter fuera de letras, números, barras y guionesPorque el archivo se genera dentro del mismo hilo, he intentado hacer referencia a un archivo estático, pero el resultado es el mismo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta