Jump to content
Sign in to follow this  
Wolfengoth

PHP file upload problem

Recommended Posts

I am trying to send a file through Rest Webservices using php and i was able to send the file through email but i'm having problems with the webservices, it only receives an empty file.

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
if($_POST)
{
    //check if its an ajax request, exit if not
    if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
        $output = json_encode(array( //create JSON data
            'type'=>'error',
            'text' => 'Sorry Request must be Ajax POST'
        ));
        die($output); //exit script outputting json data
    }
    //Sanitize input data using PHP filter_var().
    $user_name      = filter_var($_POST["user_name"], FILTER_SANITIZE_STRING);
	$user_company   = filter_var($_POST["user_company"], FILTER_SANITIZE_STRING);
    $user_email     = filter_var($_POST["user_email"], FILTER_SANITIZE_EMAIL);
    $country_code   = filter_var($_POST["country_code"], FILTER_SANITIZE_NUMBER_INT);
    $phone_number   = filter_var($_POST["phone_number"], FILTER_SANITIZE_NUMBER_INT);
    $message        = filter_var($_POST["msg"], FILTER_SANITIZE_STRING);
    $to_email       = $user_email; //Recipient email, Replace with own email here
	$from_email 	= 'jveleztorres@wovenware.com'; //From email address (eg: no-reply@YOUR-DOMAIN.com)
    //additional php validation
    if(strlen($user_name)<4){ // If length is less than 4 it will output JSON error.
        $output = json_encode(array('type'=>'error', 'text' => 'Name is too short or empty!'.realpath(sys_get_temp_dir()."\\".basename($_FILES['file_attach']['tmp_name']))));
        die($output);
    }
	if(strlen($user_company)<2){ // If length is less than 4 it will output JSON error.
        $output = json_encode(array('type'=>'error', 'text' => 'Company Name is too short or empty!'));
        die($output);
    }
    if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
        $output = json_encode(array('type'=>'error', 'text' => 'Please enter a valid email!'));
        die($output);
    }
    if(!filter_var($country_code, FILTER_VALIDATE_INT)){ //check for valid numbers in country code field
        $output = json_encode(array('type'=>'error', 'text' => 'Enter only digits in country code'));
        die($output);
    }
    if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //check for valid numbers in phone number field
        $output = json_encode(array('type'=>'error', 'text' => 'Enter only digits in phone number'));
        die($output);
    }
	if(strlen($phone_number) != 7){ // Phone number can contain 4 characters
        $output = json_encode(array('type'=>'error', 'text' => 'Must only contain 7 numbers without including  country code'));
        die($output);
    }
    if(strlen($message)<3){ //check emtpy message
        $output = json_encode(array('type'=>'error', 'text' => 'Too short message! Please enter something.'));
        die($output);
    }
	 if(isset($_FILES['file_attach'])) //check uploaded file
    {
        //get file details we need
        $file_tmp_name    = $_FILES['file_attach']['tmp_name'];
        $file_name        = $_FILES['file_attach']['name'];
        $file_size        = $_FILES['file_attach']['size'];
        $file_type        = $_FILES['file_attach']['type'];
        $file_error       = $_FILES['file_attach']['error'];
        //exit script and output error if we encounter any
        if($file_error>0)
        {
            $mymsg = array( 
            1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini", 
            2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", 
            3=>"The uploaded file was only partially uploaded", 
            4=>"No file was uploaded", 
            6=>"Missing a temporary folder" ); 
            $output = json_encode(array('type'=>'error', 'text' => $mymsg[$file_error]));
            die($output); 
		}
	}
    //read from the uploaded file & base64_encode content for the mail
	$convertIt = $_FILES['file_attach']['type'];
	$whatIWant1 = substr($convertIt, strpos($convertIt, "/") + 1);
	if($whatIWant1 === "octet-stream"){
		$whatIWant = "zip";
	}
	else{
		$whatIWant = $whatIWant1;
	}
    //email body with attachment
	$message_body = "Message: ".$message."<br/>"."Contractor".$user_name."<br/>"."Company:".$user_company."<br/>"."Email : ".$user_email."<br/>"."Phone Number : (".$country_code.") ". $phone_number."<br/>"."Access Bonita to initiate Invoice Approval process" ;
	$handle = $_FILES["file_attach"]["name"];
	$uploadfile1 = "C:/Users/hrivera/Documents/".basename($_FILES['file_attach']['name']);
	$handle =fopen($uploadfile1,"r");
	$uploadfile = tempnam(sys_get_temp_dir(), sha1($_FILES['file_attach']['name'])); 
    if (move_uploaded_file($_FILES['file_attach']['tmp_name'], $uploadfile)) {
		require 'PHPMailerAutoload.php';
		$mail = new PHPMailer;
		$mail->SMTPDebug = 3;                               // Enable verbose debug output
		$mail->isSMTP();                                      // Set mailer to use SMTP
		$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
		$mail->SMTPAuth = true;                               // Enable SMTP authentication
		$mail->Username = '';                 // SMTP username
		$mail->Password = '';                           // SMTP password
		$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
		$mail->Port = 587;                                    // TCP port to connect to
		$mail->From = '';
		$mail->addAddress('');     
		$mail->addAttachment($uploadfile, $user_company.' Invoice.'.$whatIWant);         // Add attachments
		$mail->isHTML(true);                                  // Set email format to HTML
		$mail->Subject = $user_company.' Invoice Approval Requested';
		$mail->Body    = $message_body;
		$mail->AltBody = ', Thank you and have a nice day';
		if(!$mail->send()) {
			echo 'Message could not be sent.';
			echo 'Mailer Error: ' . $mail->ErrorInfo;
		} else {
			echo 'Message has been sent';
		}
	}
//Login to bonitasoft by using REST API
function httpRequest($host, $port, $method, $path, $params) {
	$paramStr = "";
	if ($method == "GET" || $method == "POST" ) {
		foreach ($params as $name => $val) {
			$paramStr .= $name . "=";
			$paramStr .= $val;
			$paramStr .= "&";
		}
	}
	// Assign defaults to $method and $port, if needed
	if (empty($method)) {
		$method = "GET";
	}
	$method = strtoupper($method);
	if (empty($port)) {
		$port = 8081; // Default HTTP port
	}
 
	// Create the connection
	$sock = fsockopen($host, $port);
	if (!$sock) {
		echo "Error! Couldn't open the file.";
	} else {
		if ($method == "GET") {
			$path .= "?" . $data;
	} 
	//Necessary header
	fputs($sock, "$method $path  HTTP/1.1\r\n");
	fputs($sock, "Host: $host\r\n");
	fputs($sock, "Content-type: application/x-www-form-urlencoded\r\n");
	if ($method == "PUT") {
		fputs($sock, "Content-length: " . 
		strlen($params) . "\r\n");
	}elseif ($method == "POST") {
		fputs($sock, "Content-length: " . 
		strlen($paramStr) . "\r\n"); 
	}
	fputs($sock, "Connection: close\r\n\r\n");
	if ($method == "PUT") {
		fputs($sock, $params);
	}
	elseif ($method == "POST") {
		fputs($sock, $paramStr);
	}
	// Buffer the result
	$result = "";
	do {
		$temp = fgets($sock,1024);
		$result .= $temp;
	}while($temp !="");
	fclose($sock);
	return $result;
	}
}
	//Call to Function that logs into bonitasoft
	$resp = httpRequest("localhost",
    8081, "POST", "/bonita/loginservice",
    array("username" => "walter.bates", "password" => "bpm"));
	$string = $resp;
	echo $resp;
	//Gets JSESSIONID
	preg_match("/Set-Cookie: (.*?) Path/",$string, $display);
	//Process to Start Case with variables
	$data = array("processDefinitionId"=>"5623733440372144264", "variables" => array(array("name" => "contractorComment", "value" => "$message"),array("name" => "contractorName", "value" => "$user_name"),array("name" => "contractorCompanyName", "value" => "$user_company"),array("name" => "contractorEmail", "value" => "$user_email"),array("name" => "contractorPhone", "value" => "("."$country_code".") "."$phone_number")));
	$options = array(
	"http" => array(
    "method"  => "POST",
    "header"=>  "POST /bonita/API/bpm/case/  HTTP/1.1\r\n".
				"Host: localhost\r\n".
				"Cookie: ". $display[1]."\r\n".
				"Content-Type: application/json\r\n" .
                "Accept: application/json\r\n".
				"Cache-Control: no-cache\r\n".
	            "Pragma: no-cache\r\n".
				"Connection: close\r\n\r\n",
	 "content" => json_encode($data)
		)
	);
	$url = "http://localhost:8081/bonita/API/bpm/case/";
	$context  = stream_context_create( $options );
	$result = file_get_contents( $url, false, $context );
	$response =  json_decode($result);
	echo print_r($response);
	preg_match('/"rootCaseId":"(.*?)",/',$result, $case_id);
	//Process to Attach Document to case
	//problem lies here
	$data1 = array("caseId"=> "$case_id[1]","file"=>realpath(sys_get_temp_dir()."\\".basename(sha1($_FILES['file_attach']['name']))),"name"=> "doc_Invoice", "fileName"=>"Invoice.pdf","description" => "Invoice");
    echo json_encode($data1);
    switch (json_last_error()) {
        case JSON_ERROR_NONE:
            echo ' - No errors';
        break;
        case JSON_ERROR_DEPTH:
            echo ' - Maximum stack depth exceeded';
        break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Underflow or the modes mismatch';
        break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Unexpected control character found';
        break;
        case JSON_ERROR_SYNTAX:
            echo ' - Syntax error, malformed JSON';
        break;
        case JSON_ERROR_UTF8:
            echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
        break;
        default:
            echo ' - Unknown error';
        break;
    }
	$options1 = array(
	"http" => array(
		"method"  => "POST",
		"header"=>  "POST /bonita/API/bpm/case/  HTTP/1.1\r\n".
				"Host: localhost\r\n".
				"Cookie: ". $display[1]."\r\n".
				"Content-Type: application/json\r\n" .
                "Accept: application/json\r\n".
				"Cache-Control: no-cache\r\n".
	            "Pragma: no-cache\r\n".
				"Connection: close\r\n\r\n",
		"content" => json_encode($data1)
		)
	);
	$url1 = "http://localhost:8081/bonita/API/bpm/caseDocument";
	$context1  = stream_context_create($options1);
	$result1 = file_get_contents($url1, false, $context1);
	$response1 =  json_decode($result1) ;
	echo print_r($response1);
	}
?>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.