Jump to content

PHP file upload problem


Wolfengoth
 Share

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);
	}
?>
Link to comment
Share on other sites

This thread is more than a year old.

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.

 Share

×
×
  • 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.