Я пытаюсь прикрепить файл к делу Jira, используя их API. Я делаю это в Drupal 6 (PHP v.5.0). Вот код, который у меня есть:
$ch = curl_init(); $header = array( 'Content-Type: multipart/form-data', 'X-Atlassian-Token: no-check' ); $attachmentPath = $this->get_file_uploads(); //$attachmentPath comes out to be something like: //http://localhost/mySite/web/system/files/my_folder/DSC_0344_3.JPG $data = array('file'=>"@". $attachmentPath, 'filename'=>'test.png'); $url= 'https://mysite.atlassian.net/rest/api/2/issue/20612/attachments/'; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, $this->get_jira_headers()); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POSTFIELDS ,$data); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); $result = curl_exec($ch); $ch_error = curl_error($ch);
Проблема в том, что результат $ получается ложным, а $ ch_error утверждает, что он не может открыть файл. Эта ошибка имеет отношение к Drupal или что-то делать с тем, как я отправляю свой запрос в Jira? Кстати, если я использую абсолютный путь, вот так:
$attachmentPath = 'C:\wamp\www\mySite\web\sites\mySite.net\files\my_folder\DSC_0333.JPG';
Загрузка очень хорошая.
Это должно сработать для вас:
$data = array('file'=>"@". $attachmentPath . ';filename=test.png');
Это была ошибка с cURL PHP <5.2.10, вы можете увидеть это в PHP-трекере ошибок: https://bugs.php.net/bug.php?id=48962 (И в комментариях, которые вы видите, были исправлены)
И если вы используете PHP 5.5.0+, вы можете использовать это:
$cfile = new CURLFile($attachmentPath); $cfile->setPostFilename('test.png'); $data = array('file'=>$cfile);
Вы также можете увидеть это в комментарии JIRA : Комментарий JIRA
Также я думаю, вы хотите изменить это:
curl_setopt($ch, CURLOPT_HTTPHEADER, $this->get_jira_headers());
к этому:
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);