Jump to content
  • 0

Отправить файл curl


jdk
 Share

Question

Здравствуйте.

Делаю выборку из БД и пишу в файл.

while($row = mysqli_fetch_assoc($result)) {

    $data = unserialize_array($row['data']);

    $line = [
        $row['user_id'].';'.
        $row['email'].';'.
        toWin( $data['firstname'] ).';'.
        toWin( $data['lastname'] ).';'        
    ];
    file_put_contents('users.csv',$line[0]."\n",FILE_APPEND);
}

fclose('users.csv');
$mysqli->close();

 

Хочу отправить его curl'ом, но не получается. Нужно отправить POST'ом. Подскажите пожалуйста, где ошибка? (php 5.4).

$filesize = filesize('users.csv');
$file = file_get_contents('users.csv', true);

/*
Отправка файла
*/

$headers = "Authorization: Basic YXBpd2ViOnhLd1hTMk5Ua0R6VjlTeg==
    Accept: application/xml
    Content-Type: text/csv
    Content-Length: $filesize    
    ";
$split = explode("\n",$headers);

$ch = curl_init();

$post = array(
    'file' => '@' . $file,
);
curl_setopt($ch, CURLOPT_URL, "https//...(куда шлю)");
curl_setopt($ch, CURLOPT_HTTPHEADER,$split );
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_exec($ch);
curl_close($ch);

Если я к скрипту обращаюсь через  GET(открываю в браузере), то всё норм, файл создаётся и отправляется GET'ом. Но мне нужно что бы он (скрипт) раз в сутки отсылал данные.

Если пытаюсь поставить в задаче php /var/.../index.php, то ничего не получается. Если вызываю скрипт из консоли та же беда. Подскажите, что делать?
 

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Делал по аналогии с уже работающими скриптами в кроне. Там сразу php, тоже слегка смутило)

сделал

'file' => '@users.csv',

curl_erro ошибок не показывает, curl_getinfo( $ch ) тоже вроде ок.
Завтра узнаю, пришёл ли файл.

Link to comment
Share on other sites

  • 0

Зачем прям так жестко велосипедить в конце 2016 года?

Все уже написано https://github.com/guzzle/guzzle/blob/master/docs/quickstart.rst#sending-form-files

Для отладки используйте https://github.com/Seldaek/monolog

Edited by keltanas
  • Like 1
Link to comment
Share on other sites

  • 0
46 минут назад, keltanas сказал:

Зачем прям так жестко велосипедить в конце 2016 года?

Все уже написано https://github.com/guzzle/guzzle/blob/master/docs/quickstart.rst#sending-form-files

Для отладки используйте https://github.com/Seldaek/monolog

Если уж на то пошло, то непонятно зачем вообще отправлять файл. Проще и безопаснее чтобы сервер-получатель сам запрашивал файл когда ему нужно.

На стороне получателя все начнется и закончится  file_get_contents()

А на стороне отправителя оператором echo

 

Link to comment
Share on other sites

  • 0
37 минут назад, wwt сказал:

Если уж на то пошло, то непонятно зачем вообще отправлять файл. Проще и безопаснее чтобы сервер-получатель сам запрашивал файл когда ему нужно.

В требованиях не сказано, что нужно забирать файл, сказано, что его нужно отправлять.

На это могут быть разные причины. В данном случае автор пытается решить именно проблему отправки.

Link to comment
Share on other sites

  • 0
2 часа назад, keltanas сказал:

В требованиях не сказано, что нужно забирать файл, сказано, что его нужно отправлять.

На это могут быть разные причины. В данном случае автор пытается решить именно проблему отправки.

Точно так же как автор не спрашивал про сторонние библиотеки )

Link to comment
Share on other sites

  • 0
40 минут назад, wwt сказал:

Точно так же как автор не спрашивал про сторонние библиотеки )

Библиотека - это инструмент для решения задачи.

Коректировка требований под то, как тебе удобно - это уход от решения задачи.

Link to comment
Share on other sites

  • 0
3 часа назад, keltanas сказал:

Библиотека - это инструмент для решения задачи.

Коректировка требований под то, как тебе удобно - это уход от решения задачи.

То есть если санки в гору толкать, а не тащить, то санки на гору не попадут? =)))

А применять библиотеку, причем мало известную, не корректировка требований?

Link to comment
Share on other sites

  • 0
31 минуту назад, wwt сказал:

То есть если санки в гору толкать, а не тащить, то санки на гору не попадут? =)))

Не надо путать теплое с мягким ;) 

31 минуту назад, wwt сказал:

А приминять библиотеку, причем мало известную, не корректировка требований?

Что? Малоизвестную? Как бэ 8000 звезд у одной и 5500 у другой намекаэ... что кто-то застрял где-то во времени далеко на горе толкая санки..

Еще немного статистики:

https://packagist.org/packages/guzzlehttp/guzzle 21 846 151 установок

https://packagist.org/packages/monolog/monolog 41 716 397 установок

Link to comment
Share on other sites

  • 0
8 часов назад, keltanas сказал:

Не надо путать теплое с мягким ;) 

Что? Малоизвестную? Как бэ 8000 звезд у одной и 5500 у другой намекаэ... что кто-то застрял где-то во времени далеко на горе толкая санки..

Еще немного статистики:

https://packagist.org/packages/guzzlehttp/guzzle 21 846 151 установок

https://packagist.org/packages/monolog/monolog 41 716 397 установок

Ок

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By TimGRo
      На Windows требуется установить CURl.
      Скачал альтернативу терминал-ConEmu. И как понял нужно в строке ввода ввести $ sudo apt-get install curl - далее, начнется скачивание.
      Но выдает:
      Microsoft Windows [Version 6.1.7601]
       Павел@ПАВЕЛЗ C:\Users\Павел$ sudo apt-get install curl"sudo" не является внутренней или внешнейкомандой, исполняемой программой или пакетным файлом. Что не так?
    • By youmay
      Подскажите, как в PHP послать curl`ом следущий запрос:
      POST /feeds/api/users/default/uploads HTTP/1.1Host: uploads.gdata.youtube.comAuthorization: AuthSub token="DXAA...sdb8"GData-Version: 2X-GData-Client: b1c4t9sl2159X-GData-Key: key=adf15ee97731bca89da876c...a8dcSlug: video-test.mp4Content-Type: multipart/related; boundary="f93dcbA3"Content-Length: 1941255Connection: close--f93dcbA3Content-Type: application/atom+xml; charset=UTF-8<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007"> <media:group> <media:title type="plain">Bad Wedding Toast</media:title> <media:description type="plain"> I gave a bad toast at my friend's wedding. </media:description> <media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People </media:category> <media:keywords>toast, wedding</media:keywords> </media:group></entry>--f93dcbA3Content-Type: video/mp4Content-Transfer-Encoding: binary<Binary File Data>--f93dcbA3--Отдельно файл отправлять получается, а вместе с xml нет.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy