如何使用PHP创建CSV文件(并上传)

时间:2009-11-05 15:51:11

标签: php file csv file-upload

例如,我有一个变量“$ foo”,其中包含我想要在CSV中显示的所有数据:

$foo = "some value,another value,last value";

我的目标是:

  1. 创建一个名为“some.csv”的CSV文件,其内容等于$ foo

  2. 将“some.csv”上传到我的服务器。

  3. 如何做到这一点?

    更新:以下是适用于我的确切代码。

    $foo = "some value,another value,last value";
    $file = 'some_data.csv';
    file_put_contents($file, $foo);
    

5 个答案:

答案 0 :(得分:2)

请参阅 fputcsv()

如果$ foo已经是csv格式的。您可以使用file_put_contents()

您没有指定上传方法。以下是使用ftp(UNSECURE)的示例:

$foo = '...csv data...';
$username = "myUser";
$password = "myPassword";
$url = "myserver.com/file.csv";
$hostname= "ftp://$username:$password@$url";
file_put_contents($hostname, $foo);

答案 1 :(得分:2)

第1名:

file_put_contents("foobar.csv", $yourString);

2号:

$c = curl_init("http://"...);  
curl_setopt($c, CURLOPT_POSTFIELDS, array('somefile' => "@foobar.csv"));
$result = curl_exec($c);
curl_close($c);
print_r($result);

记下文件名前的@

答案 2 :(得分:1)

如果您已拥有包含所有数据的变量,则可以使用file_put_contents将其另存为csv

答案 3 :(得分:1)

如何使用PHP上传CSV文件(工作代码

查询库

<?php 
class query{

function mysql_query_string($string){
    $enabled = true;
    $htmlspecialchars = false; # Convert special characters to HTML entities 
    /****************************************************************
    The translations performed are: 

    '&' (ampersand) becomes '&amp;' 
    '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set. 
    ''' (single quote) becomes '&#039;' only when ENT_QUOTES is set. 
    '<' (less than) becomes '&lt;' 
    '>' (greater than) becomes '&gt;' 

    *****************************************************************/

    if($htmlspecialchars){
    # Convert special characters to HTML entities 
    $string = htmlspecialchars($string, ENT_QUOTES);
    }
    else{
    /****************************************************************
    '"' (double quote) becomes '&quot;' 
    ''' (single quote) becomes '&#039;' 
    ****************************************************************/
    //$string = str_replace('"',"&quot;",$string);
    //$string = str_replace("'","&#039;",$string);
    }

    if($enabled and gettype($string) == "string"){
        # Escapes special characters in a string for use in a SQL statement
        return mysql_real_escape_string(trim($string));
    }
    elseif($enabled and gettype($string) == "array"){
    $ary_to_return = array();
    foreach($string as $str){
        $ary_to_return[]=mysql_real_escape_string(trim($str));
    }
        return $ary_to_return;
    }
    else{
        return trim($string);
    }
   }
 }
 ?>

调用Csv方法

 public function csvFileSubmitData(){

    $this->load->library('query');
    $query=new query();
    $root = DIR_PATH.'public/administrator/csv/';

    $fileToUpload= (isset($_FILES['fileToUpload']) and $_FILES['fileToUpload']['size'] > 0 and
    $_FILES['fileToUpload']['error'] == 0) ? $_FILES['fileToUpload'] : "";

       if(is_array($fileToUpload)){ # CHECK UPLOADED FILE 1 FOR VALIDATION
            $fileToUpload['name'] = str_replace(" ","_",$fileToUpload['name']);
            $fileToUpload['name'] = str_replace("&","and",$fileToUpload['name']);
            # CHECK FILE TYPE IF IT IS IMAGE JPG,GIF,PNG ETC
            $fnarr = explode(".", $fileToUpload['name']);
        }   

    $rand = rand(1000,10000);
    $filecsv = $rand."_".$fileToUpload['name'];
    $file1  =   $root.$filecsv;
    move_uploaded_file($fileToUpload['tmp_name'],$file1);

    $fieldseparator = ",";
    $lineseparator = "\n";
    $csvfile = $file1;
    $addauto = 0;
    $save = 0;
    $outputfile = "output.sql";
    if(!file_exists($csvfile)) {
        echo "File not found. Make sure you specified the correct path.\n";
        exit;
    } 
   $file = fopen($csvfile,"r");

    if(!$file) {
        echo "Error opening data file.\n";
        exit;
    }

    $size = filesize($csvfile);

    if(!$size) {
        echo "File is empty.\n";
        exit;
    }

    $csvcontent = fread($file,$size);

    fclose($file);

    $lines = 1;
    $queries = "";
    $linearray = array();
    $values = "";
    $m =0;
    $linestext = split($lineseparator,$csvcontent);

    foreach($linestext as $line){
    if($m++==0){
      continue;
    }

    $lines++;
    $line = trim($line," \t");
    if($line  == ''){
      break;
    }
    $linearray = explode($fieldseparator,$line);

    $topicname = $linearray[0];
    $question = $linearray[1];
    $answer1 = $linearray[2];

    if(isset($linearray[1]) and $linearray[1] != ''){

                $topicname = $query->mysql_query_string($linearray[0]);
                $question = $query->mysql_query_string($linearray[1]);
                $answer_type = $query->mysql_query_string($linearray[2]);
    }
    //Save Csv data in your table like this
    //query(insert into topics SET `topic`='".$topicname."',`question`='".$question."');
  }}

如果您正在使用Codeignitor Framework,那么此代码太容易集成,没有硬性和快速规则您也可以使用此代码纯PHP以及.....

感谢名单 AbdulSamad

答案 4 :(得分:0)

要创建CSV,您需要将字符串分解为数组,然后循环遍历它。之后,您可以将文件保存到服务器上Web服务器帐户可以访问的任何目录。这是一个例子......

//variables for the CSV file
$directory = '/sampledir/';
$file = 'samplefile.csv';
$filepath = $directory.$file;

//open the file
$fp = fopen("$filepath",'w+');

//create the array
$foo = "some value,another value,last value";
$arrFoo = explode(',',$foo);

//loop through the array and write to the file
$buffer = '';
foreach($arrFoo AS $value) {
   $buffer .= $value."\r\n";
} 
fwrite($fp,$buffer);

//close the file
fclose($fp);

现在,您的文件将被写入$directory中设置的目录,文件名设置在$file

-Justin