edt
edt

Reputation: 22440

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

Upvotes: 3

Views: 17713

Answers (5)

Query Master
Query Master

Reputation: 7097

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

Upvotes: 1

user2031365
user2031365

Reputation:

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

Upvotes: 0

Galen
Galen

Reputation: 30170

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

Upvotes: 1

user187291
user187291

Reputation: 53950

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

Upvotes: 2

Mike B
Mike B

Reputation: 32155

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

Upvotes: 2

Related Questions