Rant on my favourite topics : LC server with a side-dish of on-rev :-)

Alex Tweedly alex at tweedly.net
Fri Nov 17 18:53:01 EST 2017


This is a bit of a rant, so if you're not in the mood, switch off now :-)

I will (when I've calmed down and organised myself :-) submit bug reports.

So, normally, I don't have much time for my favourite hobby of scripting 
in LC, which lately has been mostly LCServer for a couple of simple 
websites I have built for friends. But this week I had lots of time set 
aside, because I've (finally) convinced one of those website owners to 
do her own maintenance / updating of the site.

The site has many images - which I have typically put into my desktop 
copy of the site, tried them out - and then synch'ed those up to the 
real site. However, for the site owner to upload photos, I needed to 
revive my script for uploading files (specifically images), which hasn't 
been used in a while. And indeed, may have been played around with in 
the meantime - so I can't be sure that this is exactly a "once-working" 
script.

It was written a long time ago - back before there was any built-in way 
to parse multi-part form content - so I did my own parsing of the POSTed 
data (actually, I think someone else did it first, and I copied that :-)

However - that no longer works. Using $_POST_RAW fails when the uploaded 
file is a jpg image - it works ok for text file, simple PNGs etc. - but 
fails dramatically when the file is proper binary. Test script of

> <?lc
> set the errormode to inline
> put "raw has" && the number of bytes in $_POST_RAW && "bytes<br>"
> ?>
fails with

file "/home/ua886128/public_html/tweedly.co.uk/tryme.lc"
   row 3, col 18: Chunk: can't get source string
   row 3, col 18: Chunk: error in chunk expression
.....

when the POSTed data includes a JPG file.


While google'ing around for that, I ran into the Livecode lesson on this 
topic

http://lessons.livecode.com/m/4070/l/40708-how-to-upload-a-file-with-livecode-server

which uses the (newer) $_FILES array which does the complex parsing of 
the file info from the form - a big improvement !! And indeed, the 
example there works does work. BUT - it seems that although it correctly 
parses out the file information, it loses any other POSTed values. So if 
your form consists *ONLY* of one or more files to upload - you're good. 
But if you pass any other values (e.g. folder you want it to go to, 
meta-info, passwords, etc.) that is all lost. Which basically means it's 
unusable for any real scenario.

I hear you asking - which version ?   :-)

Well, it's on my on-rev account - so it's version 7.1.0 !! - pretty old 
and out of date.

Off to check the on-rev documents - which claim that the default version 
will be the latest released version. Nope!

Another google - how do I use a different version on on-rev ? Well, 
there's a "lesson" for that too ( 
http://lessons.livecode.com/m/4070/l/41105-how-do-i-choose-which-livecode-server-engine-to-use-with-on-rev 
)

Summary of Answer : use .htaccess, and specify the exact version I wish 
to use; engines are stored in /cgi-bin/livecode-server-<version_number>


Hmmm - which ones are available ?

Turns out that /cgi-bin is read-protected (probably sensibly :-) - which 
means there is no way to find out what ones there are. I tried a few 
guesses, but didn't stumble into one - so unable to use on-rev.

Fortunately, I have another account somewhere else :-)

So - moved everything over to my HostM account (running 8.1.7), and with 
this later version the $_FILES and $_POST arrays are both properly 
available. Hurrah !   ($_POST_RAW still causes complete failure).

So - only 3 days later, I have finally got past a problem that shouldn't 
even have existed - just occasionally I with I'd stuck with PHP :-)

But - still need to solve the problem of my database interactions - 
which I want to do through revIgniter, rather than through my little 
utility script for doing the actual upload. No problem - just take the 
rest of the data, stick in a JSON-encoded cookie, and redirect back to 
the revIgniter script on success.

That's when I ran into the problem that aArrayToJSON() isn't 
(automatically) available on LCServer. Fortunately Devin has given me an 
answer to that (Thanks!!) so I should be back on track in another hour 
or two ...

End of rant. Thanks for listening :-)

Alex.





More information about the use-livecode mailing list