Here's an example I posted about 6 months ago. Worked well for me.
- Ryan -------- Original Message -------- Subject: REST Upload Shapefile using PHP cURL Date: Wed, 08 Dec 2010 10:39:07 -0600 From: Ryan Williams <rwilli...@paqinteractive.com> To: geoserver-users@lists.sourceforge.net Hello all,I've been working on a PHP cURL version of the cURL example that uploads a ZIP file containing a shapefile and creates a new datastore in Geoserver. I've been testing it out and have an example that is working for me. I attached an annotated copy of the script to this email.
This script is based on the POST example in the Geoserver REST Extension examples and a PHP cURL file upload example from http://shivakvs.wordpress.com/2009/02/12/file-upload-php/ per Arne Kepp's suggestion, and the suggestions of the web programmers that I work with.
Please share any ideas for improvements.I have a simple web page setup that includes a form with a file input and a submit button. When that page loads, it also runs a function in this php file to see if a file is in the request header. If there is, then the REST Upload script is run.
I think an example similar to this would be nice to have in the REST Configuration Extension docs.
It's really cool how well these REST tools work. -Ryan -- Ryan Williams, GISP GIS Analyst / Programmer PAQ Interactive Inc. Monticello, IL www.paqinteractive.com
<? php function prepUL(){ //checks to see if there was a file uploaded from the file input named 'upload'. if($_FILES){ if(@is_uploaded_file($_FILES['upload']['tmp_name'])){ //if yes, then the restUpload function is run. $this->restUpload(); } } }// end of prepUL function function restUpload(){ // Open log file - will be created in the same folder where this file is saved. if it already exists it will be overwritten $logfh = fopen("GeoserverPHP.log", 'w') or die("can't open log file"); // Get the uploaded file from the form and do some work with names $data = $_FILES['upload']; // Retrieve the file specified in a form input field with <input type="file" name="upload" id="upload"> $filename ='b'.time().$data['name']; // creating a dynamic file name by adding the letter 'b' and a time stamp to the file name. move_uploaded_file($_FILES['upload']['tmp_name'],$filename); // Moving the file from a temporary folder to a more permenant location on the same server $fp = fopen($filename,'r'); // Open the file $file_parts = pathinfo($filename); // use pathinfo to get an array of file name parts $file = $file_parts['filename']; // get the file name without extension - makes for a better store name // setup some variables you'll use to initiate cURL session //Edit $service and $request to match your setup. $service = "http://maps.example.com/geoserver/"; // replace with the URL to your Geoserver installation that has the REST extension installed $request = "rest/workspaces/test_ws/datastores/".$file."/file.shp"; // the rest operation to create a datastore & layer from the shapefile within the uploaded zip file // in the above request, 'test_ws' should be replaced with the workspace you want the datastore created within. // if the workspace doesn't exist, the datastore will be created in your default workspace. see the REST extension documentation on the Geoserver website to learn more. $url = $service . $request; // puts the geoserver url and REST request together into one url. // Initiate cURL session $ch = curl_init($url); // Set several cURL options //cURL options for uploading the ZIP file and sending the REST request curl_setopt($ch, CURLOPT_PUT, 1); curl_setopt($ch, CURLOPT_UPLOAD,true); curl_setopt($ch, CURLOPT_REFERER,true); curl_setopt($ch, CURLOPT_INFILE,$fp); curl_setopt($ch, CURLOPT_INFILESIZE,filesize($filename)); curl_setopt($ch, CURLOPT_HTTPHEADER, array('content-type: application/zip')); // sets the content type in the request header // Optional settings for debugging curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //option to return string curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_STDERR, $logfh); // logs curl messages //Edit $passwordStr to be a valid username:password combination for your Geoserver setup. $passwordStr = "user:password"; // replace with your username:password curl_setopt($ch, CURLOPT_USERPWD, $passwordStr); //PUT return code - used when writing the log file. $successCode = 201; $buffer = curl_exec($ch); // Execute the curl request // Check for errors and process results and write them out to the log file. $info = curl_getinfo($ch); if ($info['http_code'] != $successCode) { $msgStr = "# Unsuccessful cURL request to "; $msgStr .= $url." [". $info['http_code']. "]\n"; fwrite($logfh, $msgStr); } else { $msgStr = "# Successful cURL request to ".$url."\n"; fwrite($logfh, $msgStr); } fwrite($logfh, $buffer."\n"); curl_close($ch); // free resources if curl handle will not be reused fclose($logfh); // close logfile }// end function ?>
------------------------------------------------------------------------------ EditLive Enterprise is the world's most technically advanced content authoring tool. Experience the power of Track Changes, Inline Image Editing and ensure content is compliant with Accessibility Checking. http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________ Geoserver-users mailing list Geoserver-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geoserver-users