使用PHP创建csv文件,保存在temp中,并通过API上传

时间:2015-08-17 15:15:53

标签: php csv

我正在使用基于Mailchimp API documentation的以下代码来创建某个列表中所有成员的CSV。

session_start();
$apikey= $_SESSION["api_key"];
$list_id = $_POST['list_id'];
$chunk_size = 4096; //in bytes
$url = 'http://us1.api.mailchimp.com/export/1.0/list?apikey='.$apikey.'&id='.$list_id;
$handle = @fopen($url,'r');
$csvOutput = "";
if (!$handle) {
  echo "failed to access url\n";
} else {
  $i = 0;
  $header = array();
  while (!feof($handle)) {
    $buffer = fgets($handle, $chunk_size);
    if (trim($buffer)!=''){
      $obj = json_decode($buffer);
      if ($i==0){
        $header = $obj;
      } else {
        $csvOutput .= $obj[0]."\n";
      }
      $i++;
    }
  }
  fclose($handle);
$filename = "list-".$list_id.".csv";
file_put_contents($filename, $csvOutput);

}

如果我完全在本地运行它,它可以很好地工作,并在与上面的PHP文件相同的目录中生成CSV。但是,当我在我的服务器上运行它时,它完成没有错误,但我找不到文件的实际存储位置。我知道$apikey$list_id正好通过。我想可能存在阻止文件保存的目录权限问题。

为了进一步说明这一点,我真的不想将文件存储在我的服务器上。我实际上想要获取生成的文件并立即使用他们的API将其上传到Box.com。我可以自己运行以下代码,文件上传完美。我只是不确定如何将两者结合起来。

$headr[] = 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxx';
    $target_url = 'https://upload.box.com/api/2.0/files/content';
    $file_name_with_full_path = realpath('better.jpg');//this needs to be the file that was generated with the above PHP
    $post = array('parent' => '4224475591','file_contents'=>'@'.$file_name_with_full_path);
 $json = json_encode(array(
                                'name' => 'myfile', 
                                'parent' => array('id' => 4224475591)
                            ));
        $fields = array(
                      'attributes' => $json,
                      'file'=>'@'.$file_name_with_full_path
                  );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER,$headr);
    curl_setopt($ch, CURLOPT_URL,$target_url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    $result=curl_exec ($ch);
    curl_close ($ch);
    echo $result;

那么,完整的问题是如何将这两个PHP文件组合在一起生成CSV并立即上传到Box?如果文件暂时保存然后删除或类似文件,我很好。

1 个答案:

答案 0 :(得分:0)

您需要在服务器上使用绝对路径。像这样:

$filename = "/var/www/vhosts/domain.com/httpdocs/list-".$list_id.".csv";

你可以作为一个cron作业运行的第二个脚本,虽然一旦创建了文件,使用你的curl函数应该没有问题,然后在一个脚本中。