开发者

How to Create a CSV file using PHP (and upload it)

For example, I have a variable "$foo" that includes all the data which I want to show in the CSV:

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

My goal is to:

  1. Create a CSV file named "some.csv" whose contents are equal to $foo

  2. Upload "some.csv" to my server.

How can this be done?

Update: Here's the exact code that worked for me.

$foo = "some开发者_开发问答 value,another value,last value";
$file = 'some_data.csv';
file_put_contents($file, $foo);


Number 1:

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

Number 2:

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

note the @ before the filename


See fputcsv()

If $foo is already csv-formatted. You can use file_put_contents()

You don't specify the upload method. Here is an example using ftp (UNSECURE):

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


If you already have the variable with all the data you can use file_put_contents to save it as a csv


How to upload CSV file using PHP (Working Code)

Query Library

<?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);
    }
   }
 }
 ?>

Call Csv Method

 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."');
  }}

If you are using Codeignitor Framework so this code is too easy to integrate ,No hard&fast rule you can also use this code plain PHP as well as .....

Thanx AbdulSamad


To create the CSV you would need to break your string into an array, then loop through it. After that you can save the file to any directory the web server account has access to on your server. Here is an example ...

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

Your file will now be written to the directory set in $directory with the filename set in $file.

-Justin

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜