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