You are here: Re: automated upload with PHP « PHP Programming Language « IT news, forums, messages
Re: automated upload with PHP

Posted by shimmyshack on 03/30/07 22:19

On Mar 30, 7:50 pm, "Steve Poe" <steve....@gmail.com> wrote:
> On Mar 29, 8:49 pm, "Aerik" <asyl...@gmail.com> wrote:
>
>
>
> > On Mar 29, 8:29 pm, "Steve Poe" <steve....@gmail.com> wrote:
>
> > > > > sure, you can script on the client using what is called active
> > > > > scripting.
> > > > > its nice and familiar, so you would either
> > > > > 1) have your script one once per day and upload any images not already
> > > > > uploaded from a set of folders
> > > > > 2) configure explorer so you can right click and select upload image,
> > > > > your php script would be run in the bvackground with argument such as
> > > > > c:\path\to\php -r "%1"
> > > > > and it would do the rest.
> > > > > Why not use FTP if you are scripting this, as it will be nice and
> > > > > robust and can interact is a predicatable way with your fileserver -
> > > > > providing it can have an ftp serve running on it, like filezilla
> > > > > server.
>
> > > > oops I should have added, that if you have a few computers you need to
> > > > install this on you could use NSIS (Nullsoft Scriptable Install
> > > > System)http://nsis.sourceforge.net/Main_Pagetowrapupeverything
> > > > including the script that makes the right click functionality between
> > > > tiffs and the php script, and distribute that.
>
> > > Thanks for your help (and the link). I am not familar with
> > > implementing
> > > FTP through PHP. It's mainly PHP with HTML forms. The PHP app runs on
> > > a
> > > Linux box (hopefully this does not matter) and I believe it also has
> > > ftp access. At this point, there will only be one computer that the
> > > PHP application will need to automatically load
> > > the TIF image. The file will be saved in a directory called xrays off
> > > of the C:\
> > > drive.
>
> > > Steve
>
> > Hi Steve -
> > Would it suit your requirement to hard code the path into the file
> > upload box? The user still has to click "upload" but will not have to
> > find the file each time.
>
> > Aerik
>
> Aerik,
>
> Hard-coding would solve this since the file name would be
> the same each time, I could change the name of the
> button "process image" instead of upload but it would still
> grab the image locally. How would you hard-code the location?
>
> In my example, the xray will be stored in c:\xrays_images and the file
> will be called xray.tif.
>
> Thanks for the feedback.
>
> Steve

file value attribute is read only.
Assuming you don't want to pay for an Active-X component, the only way
to do this programmatically is to alter the security settings of
Firefox, and make sure your users know to always use FF.
(you could force that using
<!--[if IE 5]>
<SCRIPT LANGUAGE="Javascript">
alert("Use Firefox for this application");
</SCRIPT>
<P>Firefox is safer and just plain better!</P>
<![endif]-->


Now courtesy of http://www.captain.at/ajax-file-upload.php here is the
method:
type about:config and hit enter, type applets in the filter field,
then double click
signed.applets.codebase_principal_support so it is set to true.
(when you run the code ON THE PRODUCTION DOMAIN you see a pop up
allowing you to derestrict the security for this domain, when you are
happy check the remember my answer and allow to prevent your users
seeing the pop up)
You understand I wouldn't go this way at all, because while you own
and run the domain, this is JUST the kind of setting that someone who
uses XSS to gain entry to your intranet needs to completely won half
your file system!)

you've already got a php script that will take the upload but here it
is anyway reproduced from the site above: (it isn't particularly
secure)

<?php
print_r($_FILES);
?>
<hr>
<?php
print_r($_POST);

//this will cause the file to appear when uploaded,
//in the same folder as this post.php php script
$fpath = dirname(__FILE__).'/';
//or use $fpath = '/path/to/upload/directory/';

// move (actually just rename) the temporary file to the real name
move_uploaded_file ( $_FILES{myfile}{tmp_name}, $fpath.$_FILES{myfile}
{name} );

// convert the uploaded file back to binary

// javascript "escape" does not encode the plus sign "+", but
"urldecode"
// in PHP make a space " ". So replace any "+" in the file with %2B
first

$filename = $fpath.$_FILES{myfile}{name};
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);

$contents = preg_replace("/\+/", "%2B", $contents);

$handle = fopen($filename, "w");
fwrite($handle, urldecode($contents));
fclose($handle);

?>


and here is the html markup with script, some lines will be broken,
but go through it and check, and if you cant get it working email me,
and I'll send you the file.
Note I have changed a line at the top to get the filename
automatically, instead of from the form field, you now dont need the
file input field markup to be visible to the user of course (although
you might still need it to be present - I havent checked through the
js code)

as already said you will gt a warning, allow and then allow again, and
it should work, it posts to post.php by default, in the first instance
set it up to test using the file included in this post, I tested it
just now and it works just fine

<html>
<body>
<script>
var url = "post.php";
var binary;
var filename;
var mytext;

function upload() {
//here is how you could take the value from the form allowing your
users to browse first
//filename = ////document.getElementById('myfile').value;

//but hey you want it to be AUTOMATIC, I was surprised it only had one
f in tif.
filename = 'C:\\xrays_images\\xray.tif';

mytext = document.getElementById('mytext').value;
document.getElementById('ajaxbutton').disabled = true;

// request local file read permission
try {

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to read file was denied.");
}

// open the local file
var file = Components.classes["@mozilla.org/file/local;
1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( filename );
stream = Components.classes["@mozilla.org/network/file-input-stream;
1"].createInstance(Components.interfaces.nsIFileInputStream);
stream.init(file, 0x01, 00004, null);
var bstream = Components.classes["@mozilla.org/network/buffered-
input-stream;1"].getService();
bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream);
bstream.init(stream, 1000);
bstream.QueryInterface(Components.interfaces.nsIInputStream);
binary = Components.classes["@mozilla.org/binaryinputstream;
1"].createInstance(Components.interfaces.nsIBinaryInputStream);
binary.setInputStream (stream);

// start AJAX file upload in 1 second
window.setTimeout("ajax_upload()", 1000);
}

function ajax_upload() {
// request more permissions
try {

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to read file was denied.");
}

http_request = false;
http_request = new XMLHttpRequest();
if (!http_request) {
alert('Cannot create XMLHTTP instance');
return false;
}

// prepare the MIME POST data
var boundaryString = 'capitano';
var boundary = '--' + boundaryString;
var requestbody = boundary + '\n'
+ 'Content-Disposition: form-data; name="mytext"' + '\n'
+ '\n'
+ mytext + '\n'
+ '\n'
+ boundary + '\n'
+ 'Content-Disposition: form-data; name="myfile"; filename="'
+ filename + '"' + '\n'
+ 'Content-Type: application/octet-stream' + '\n'
+ '\n'
+ escape(binary.readBytes(binary.available()))
+ '\n'
+ boundary;

document.getElementById('sizespan').innerHTML = "requestbody.length="
+ requestbody.length;

// do the AJAX request
http_request.onreadystatechange = requestdone;
http_request.open('POST', url, true);
http_request.setRequestHeader("Content-type", "multipart/form-data;
boundary=\"" + boundaryString + "\"");
http_request.setRequestHeader("Connection", "close");
http_request.setRequestHeader("Content-length", requestbody.length);
http_request.send(requestbody);

}

function requestdone() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
result = http_request.responseText;
document.getElementById('myspan').innerHTML = result;
} else {
alert('There was a problem with the request.');
}
document.getElementById('ajaxbutton').disabled = false;
}
}

</script>

<form>
Text: <input type="text" id="mytext" name="mytext" size="40">
<br>
File: <input type="file" id="myfile" name="datafile" size="40"><br>
<input type="button" id="ajaxbutton" value="AJAX IT"
onclick="upload();">
</form>

<div id="sizespan"></div>
<hr>
<div id="myspan"></div>

</body>
</html>


NOW do you wish you had done the other thing!!

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация