0

I'm trying to build a REST API in PHP. My API needs to be able to upload files and get user information via the $_POST method. Any body that can help me to create a REST API and also helps me to find out what components I need for creating an API.

<?php

 header("content-type:application/json");
 $userid=$_POST['user_id'];
 $email=$_POST['email'];
 $fname=$_POST['firstname'];
 $lname=$_POST['lastname'];

 // include db connect class
    require_once __DIR__ . '/db_connect.php';

    // connecting to db
    $db = new DB_CONNECT();
 //$result=mysql_query("select * form user");
 $sql="UPDATE user SET email='$email',fname='$fname',lname='$lname' WHERE userid='$userid'";
 $result = mysql_query($sql);
 if ($result) {
        // successfully inserted into database
        $response["code"] = 1;
        $response["message"] = "successfully updated";

        // echoing JSON response
        echo json_encode($response);
    } else {
        // failed to insert row
        $response["code"] = 2;
        $response["message"] = "Oops! failed to insert data";

        // echoing JSON response
        echo json_encode($response);
    }

 //file uploading 
 if (empty($_FILES) || $_FILES['file']['error']) {
  //die('{"OK": 0, "info": "Failed to move uploaded file."}');
  $response["code"] = 2;
  $response["message"] = "Oops! An File uploading error occurred.";
  echo json_encode($response);
}

$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;

$fileName = isset($_REQUEST["name"]) ? $_REQUEST["name"] : $_FILES["file"]["name"];
$filePath = "uploads/$fileName";


// Open temp file
$out = @fopen("{$filePath}.part", $chunk == 0 ? "wb" : "ab");

if ($out) {
  // Read binary input stream and append it to temp file
  $in = @fopen($_FILES['file']['tmp_name'], "rb");

  if ($in) {
    while ($buff = fread($in, 4096))
          fwrite($out, $buff);
       //print($out);
     // echo sizeof($out);
  } else
  //  die('{"OK": 0, "info": "Failed to open input stream."}');
 $response["code"] = 2;
 $response["message"] = "Oops!  Failed to open input Stream error occurred.";
 echo json_encode($response);
  @fclose($in);

  @fclose($out);

  @unlink($_FILES['file']['tmp_name']);
} else{
//  die('{"OK": 0, "info": "Failed to open output stream."}');
 $response["code"] = 2;
        $response["message"] = "Oops! Failed to open output error occurred.";
        echo json_encode($response);
 }

// Check if file has been uploaded
if (!$chunks || $chunk == $chunks - 1) {
  // Strip the temp .part suffix off
  rename("{$filePath}.part", $filePath);
}


//die('{"OK": 1, "info": "Upload successful."}');
 $response["code"] = 0;
    $response["userid"]=$_POST['user_id'];
    $response["email"]=$_POST['email'];
    $response["firstname"]=$_POST['firstname'];
    $response["lastname"]=$_POST['lastname'];
    //$resopnse["file"]=$_POST['file'];
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);

?>

This my .htaccess code

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ %{ENV:BASE} index.php [QSA,L]
tom
  • 8,189
  • 12
  • 51
  • 70
Mugunthan S
  • 538
  • 3
  • 8
  • 21
  • possible duplicate of [How to write a REST API?](http://stackoverflow.com/questions/4973156/how-to-write-a-rest-api) – tom Aug 28 '14 at 12:09

1 Answers1

3

For uploading image using REST api most preferable method is to pass base64 encoded image data in post request and then put the contents after decoding base64 encoded string into file using

file_put_contents()

function

Please refer the example code snippet

E.g

$img_data=$_POST['image'];

$img_info=explode(',',$img_data);

$image_content=base64_decode($img_info[1]);

$img_extension=substr($img_info[0],11,3);

$img_filename=$_SERVER['DOCUMENT_ROOT'].'/images/img_'.time().'.'.$img_extension;

file_put_contents($img_filename,$image_content);
Rubin Porwal
  • 3,736
  • 1
  • 23
  • 26
  • 3
    `base64` is a not a good choise, especially if the API will handle tons of files under high volumes of traffic.. uploading a file to a plase and linking to the destinotion would be better @rubin-porwel – ilhnctn May 06 '16 at 13:21