Simple image of a machine cog with an enlarged centre. In the centre is a downward pointing triangle, donating a download. Everything is in a cool semi-transparent grey gradient.

corz distro machine

install..

Stand-alone mode..

corz distro machine was primarily designed to be self-contained automatic distribution system. Drop any files you wish to distribute into the "download" folder, simple. If you have any source files or scripts you wish to allow users to view, pop those into the "source" folder the same way.

If you don't need the source facility, simply disable it..

$machine['show_source_menu'] = false;

Drop the whole "machine" folder into your web site and rename to whatever you like. let's say you called it "goodies", and dropped it in the root of your site, navigating to..

http://mysite.com/goodies/

..will bring up either the default download menu, or the source viewing menu, depending on how you set your preferences.

Users can easily switch between the "download" and "source" menus and download zips of source files from the source viewer page. All downloads are counted and totals stored in a simple flat-file database. This database is very secure.

There is also a hidden ".htaccess" file inside the "download" folder, preventing direct access to its contents, and not in the ordinary 403 DENIED way; instead when a user attempts to load that directory, or any file inside it, they will be redirected back to the main menu page. neat, check it out. You can set this up however you like.

* there is also a "docs" folder with readme's, extra css, special offers and stuff, but you don't need this to run the machine. the distribution also contains sample php source and zip files. Have fun!

As a backend download engine..

corz distro machine can provide backend download and counter services for your web site.. Instead of providing direct links to the files, you send them to the distro machine! Like this..

<a href="/goodies/index.php?download=some_file.zip">some file</a>

Drop some_file.zip into your "download" folder and it's ready to go! the distro machine will handle the download and count it for you transparently.

You could easily move the machine into your root, and perhaps rename index.php to "download.php" or something like that. don't forget the invisible .ht files!

In that case, the links would then be..

<a href="/download.php?download=some_file.zip">some file</a>

Bright sparks will have figured out that this also allows you to have your downloads embedded in other web site's pages, providing a means to easily syndicate your content. All they need to do is add one valid URL..

<a href="http://mysite/download.php?download=some_file.zip">some file</a>

Of course, this may be something you want to prevent, and there are numerous ways to do this, including strict hot-linking preferences. Do read through the preferences.

Embedded menus on-the-fly..

corz distro machine can create embedded download menus for your pages, too. simply pass "&clean=true" in your url, and the distro machine will return the menu of your choice, stripped of all headers, footers and jump links, like this..

<?php include 'http://'. $_SERVER['HTTP_HOST'] .'/engine?download=menu&section=php/newsfeed%20scripts&clean=true'; ?>

Or even (*eew*) like this..

<iframe width=400 height=160 src="/beta?download=menu&clean=true"></iframe>

Here's first example from above..

You can slam these anywhere you like, and along with its other roles, the distro machine will happily provide backend menu services for your site. Check out the download page for an extreme example. You can embed source menus this way, too.

NOTE: You can also use readfile() in much the same way as include().

special features..

You can specify certain parameters in the embedding URL, adding special features..

&titles=true    enable section and sub-section titles
&text=true    show custom text (from a file)
&sections=true    sub-section menus

Here's one with everything switched on..

Web Site Spare Parts™

The zip files..

An ever-growing collection of drop-in site parts, and other stuff. The bigger script go here. All of the scripts can be seen working right here at corz.org. Many of the example source files also function in this location. Feel free to play around..

NOTE: Often there are 'extras' in the zips, implementation demos, etc., recommended. Copying code from the code viewer is not recommended. The big active menu title ("download menu..") can switch you between source and download. In most cases, you can download the corresponding zip from directly inside the source viewer.
powered by corz distro machine v0.9.5

The source viewer..

corz distro machine comes with a built-in source viewer..

Many web servers don't support php source highlighting, and on those that do (you can add support in .htaccess files), you will often find the output truncated, which is frustrating.

Here is a solution which works under all conditions (php4+) and add to it by supporting a wide variety of other script formats; currently php ('.php', '.inc', 'phps'), text (.txt), shell and perl scripts (.sh, .pl), batch (.bat) files, as well as AutoIt, and more. The text highlighting code is ripped from my own textviewer script and can handle most things, though is fairly rudimentary compared to the php highlighting. Nice, though.

Simply drop any scripts you would like to have available for viewing directly into the "source" folder, and they will automagically be available from the source menu. You can enable/disable extensions in the preferences.

the pretty coloured source page..

Presenting your source like this is very neat.

Remember, in order for the "download" link at the bottom to work, you will need to have a zip archive in the specified download folder, called "script-filename.zip"

For instance, to allow users to download "rss.php", you would create a zip called "rss.php.zip" (or simply "rss.zip") and drop it in the "download" folder.

Clearly, there's no way to count folks copying-and-pasting source from the source view pages, but if your download links work, they *will* use them!

The source viewing facility is disabled by default; if you want to use it; check the prefs.

Back-end source highlighting service

The distro machine can provide back-end source highlighting services for your web site, too. So you can have cool highlighted source code embedded within your pages, like this..

<?php

/* some sample source code from the source folder
*/
echo 'I am only a poor sample';
debug('a poor sample');
/*
function:debug()
*/
function debug($data) {
global 
$debug_string;

    if (
$data == 'out') {
        
$debug_string .= "\n\n";
        
        if (
is_writable('debug.out')) {
            
$debug_file fopen('debug.out''w');
            
fputs($debug_file$debug_string);
            
fclose($debug_file);
        }
    } else { 
$debug_string .= $data; }
}
/*
end function debug()
*/
debug('out');
?>

All you do is pass the regular URL, except add "&clean=true", like this..

<?php readfile('http://'.$_SERVER['HTTP_HOST'].
'/engine?section=php&source=sample.php&clean=true'); ?>


Rather than specifying section and file, you might prefer to use the short format, like this..

<?php readfile('http://'.$_SERVER['HTTP_HOST'].
'/engine?source=php/sample.php&clean=true'); ?>


Either way, the distro machine will return your pretty coloured source with the usual source viewer page header and footer stripped off. neat.

NOTE: using include() to embed machine objects is now deprecated in favour of readfile(). include() has the advantage of not leaving extra requests in your web logs, but is more likely to fail on a particular server setup, though if it works on your server, it will work well. readfile() has the advantage of working no matter what your server configuration happens to be. Your call.

You can use the source highlighting facility for non-php files, too, where it automatically converts your shell/bash/batch/perl/AutoIt/etc. scripts, .nfo files, or just plain old text into html; XHTML or HTML5, rather; which could be handy. I should make it a feature.. Auto-HTMLizing info viewer, or something. Anyway, this is what a regular text file (in this case, one of my readme's) might look like..
      #####    ###     ##  ### ########              ###     ##  ###    ###TM
    #######  #######   ####### ########            #######   #######  #######
   ###      ###   ###  ###         ###            ###   ###  ###     ###   ##
   ###      ###   ###  ##       ###               ###   ###  ##      ###   ##
    #######  #######   ##      ########    ###     #######   ##        ######
      #####    ###     ##      ########    ###       ###     ##          ####
                                                                      ######


                "corz-style" beta-tester license version 1.3


    By installing and using this product, you confirm your acceptance of, and 
    agree to become bound by the terms of this agreement. If you do not agree to 
    be bound by these terms, do not install this software!

    You may not copy, lend, share, or otherwise distribute this software or 
    "significant portions" thereof, without the express written consent of the 
    author, me.

    Warranty: This software comes "as-is", and while designed to be as fast and 
    secure and fit as possible for its intended purpose, it comes with no 
    warranty, expressed or implied. Please endeavour to report any bugs/ 
    strangeness to the email address at the foot of this document.

    Disclaimer: neither corz.org nor its developer will be liable or responsible 
    for any damages you, your business or any third party may suffer, including, 
    but not limited to the use or inability to use this software. corz.org makes 
    no warranties of any kind, expressed or implied, for this software, and 
    disclaims any warranty or merchantability or fitness for a particular 
    purpose. Though, of course, it will probably work great!

    This software is provided on the condition that you test it fully and report 
    back any issues, bugs, problems, errors (both in the software and 
    documentation), along with your general report. I'm always keen to receive 
    feedback on the overall package and documentation, as well as the installer 
    program, if any is supplied. Include anything at all, even if you think it's 
    not that important. Your feelings and random thoughts are very much 
    appreciated. I read them all carefully.

    On successful completion of the beta-testing phase, and software "release"
    providing you have complied with the terms of the agreement, in return for 
    your beta test report(s), you will receive a fully licensed copy of the 
    software, for your own personal use, with thanks!

    Have fun!

    ;o)

    betas at corz dot org

    This work (c) copyright cor and corz.org 2000->tomorrow!

    note: corz.org reserves the right to amend or update these policies without 
    notice - failure to comply with the terms and conditions will result in 
    license termination, and possibly a terse email.


It looks like text, but acts like 100% XHTML strict/HTML5. And if you are wondering how on earth the cool "/engine?" links work, check out the faq page, or just dive directly into some mod_rewrite hacking.

Stats, counters and admin..

I added a funky stats page so you can get a neat list of your download statistics

There's an (optional) "stats" link at the bottom-right of the menu page, which can (optionally) be hidden. Clicking that will bring up your (optionally) password protected statistics page. you can (optionally) disable this altogether.

You can edit your download scores there, too, handy if you do a few tests and don't want them messing up your statistics, etc. if the stats page is open to the public (no password has been set), editing functions are not available.

This feature was brought to you with the help of the word "optionally"

F.A.Q..

Yes!

you can add a couple of lines to your .htaccess file (the one in the root of your web server) to redirect some short URL to a long one. something like..

RewriteEngine On
RewriteRule ^funk(.*) /deep/path/to/files/folder/download.php$1


will send this URL..

http://mysite/funk?download=file.zip

to here..

http://mysite/deep/path/to/files/folder/download.php?download=file.zip

pretty cool. I've started doing my own downloads like this. it works with source view requests too..

http://mysite/funk?source=valid.php

The distro machine also allows you to set this internally, so that all the links it creates, in menus, embedded menus, downloads and what-have-you, also use your short link. Cool.

Beware: whatever word you chose for this (in our example, 'funk') must be a unique word that is not used in another URL in the root of your site. If you had, say, a file called funk.html, attempting to access it would throw up a 404 error. /funky/index.html would do the same. But so long as it doesn't begin with the same word, and it's not in the root of your site, there will be no problem. /my/funk.html is fine.

In reality, all the downloading is handled transparently, so the actual URL should never appear in the user's address bar. the only place it is seen is in any status bar the user's browser may have. I know, the wee things can be so important.

it is cool, though, to be able to send folks to http://mysite/funk

Here's some more suggested rules to make things interesting..

	RewriteEngine On
	RewriteRule ^funk/(.*)		/funk$1 [nc]
	RewriteRule ^funk(.*)		/deep/path/to/files/folder/download.php$1 [nc]
	RewriteRule ^source/(.*)	/deep/path/to/files/folder/source/$1 [nc]
	

the [nc] bit just means No Case, or case insensitive match, so /FUNK would be caught just the same.

Can I run everything in one folder?

Yes, though it's not so easy as it used to be

In your preferences, set your download path to './' which means "this folder", now you can just chuck your downloads right in with the machine. you can do the same with you source folder preference too, have the whole lot just swimming around. very messy, though.

NOTE: you will need to move the "inc" folder out of the way, and ensure the preferences that lead to there are altered to match your new location. You can leave it in there, but folk would wander about. They couldn't see your passwords or anything like that, but it will look untidy.

Next!

All done!

You can click here so see corz distro machine dealing with the downloads here at corz.org


Welcome to the comments facility!


previous comments (three pages)   show all comments

irvin - 27.02.05 7:33 am


First off, thanks for the script! Great job! How many subsection levels can it display? I have multiple sub-section I need to display, and I was only able to get down into 1 level:

download\section1\section2

doesn't display section2






corz - 27.02.05 1:37 pm

just the one! this is by design.
but you can run them all over the place, ie. multiple copies.

;o)
(or


pavan - 27.03.05 9:44 pm

i have a e-learning site in which i need to give the students access to the downloading of files depending on the course they join.i am using php,mysql and apache webserver on suse linux.is there any way i can modify this in that way and make it work for my website.please do the need full and help me if possible giving me the code or u can also refer me other possible ways.
thanking you,
pavan.
also mail me solution if possible instead of posting it here.


corz - 29.03.05 11:24 pm

pavan, the distro machine will work straight off-the-bat. Just drop it somewhere and you're up and running! Apache/php/mysql is what most folk run, and the machine has been tested plenty in this environment.

If you need something specific, just tell me what you need!

By the way, grab the latest beta from the beta folder, there have been many improvements since the last "official" release.

;o)
(or


pavan - 30.03.05 6:34 am

thank u very much for ur prompt reply.sorry i havent tested it yet and thought of just making sure it meets my requirements before.coming to the project i am doing its a e-learning project as i told u earler.it has also learning management system and i want to add your specific distromachine as the addon for providing downloads to the students after authenticating them.

and i think u will help me in completing my project succesfully.also plz le me know clearly how to integrate distromachine with other projects which also have mysql,php,apache working in it.
thanking u,
pavan.


corz - 30.03.05 1:17 pm

pavan, all the info you need is right here, on this very page.

To run as-is, simply drop it somewhere, really, and load in a browser. That's it! Open up the file itself to set any preferences you require. If you want to know if it meets your requirements, check out one of the four distro machines running here at corz.org, like here.. https://corz.org/engine

To "integrate" into other stuff, you simply embed the machine in your pages, usually with a php "include". For full details, see above.

;o)
(or


Rob - 13.04.05 4:38 pm

Ugh!

I LOVE this program! But I'm baffled by how to add it into a page itself. I see the directions above, but they don't make sense to me (I'm only just beginning to learn php)

I can't figure out the link to post to get an embedded menu in a page.

Let's say I dropped the machine in my server in a folder called "machine", and my page is at robsdemo.com/audio/test.php

What do I change the above php include line to look like?

Ack! I'm so confused!

Your machine sure does look to be a brilliant piece of work!


corz - 18.04.05 1:48 pm

ahh feck! I did SUCH a good answer for this! I musta closed my browser before posting it, and that was DAYS ago! DAMN!

erm.. try again..

okay, you need to "include" the file. Not like a regular include (via the filesystem) but via a normal http request, so inside test.php, put a line like this..

<?php include 'http://'. $_SERVER['HTTP_HOST'] .'/machine/index.php?clean=true'; ?>

wherever you want the menu to appear. The "$_SERVER['HTTP_HOST']" part simply inserts your hostname, ie "robsdemo.com", and makes the whole thing very portable, but you could use a hard link too..

<?php include 'http://robsdemo.com/machine/index.php?clean=true'; ?>

Remember you can specify other elements that can be included by passing more "GET" variables, like maybe "&text=true" if you want your custom text to appear in the menu, etc. see above for more details.

feel free to ask more questions, I'm particularly inclined to help php n00bs, and code all my stuff with you in mind.

for now..

;o)
(or



corz - 18.04.05 1:53 pm

obviously, if you are already inside some php code, you can ommit the <?php and ?> tags!

;o)
(or


corz - 15.06.05 12:50 pm

security notice!

Due to the discovery (and fixing) of a potentially serious security hole in the distro machine's verification mechanisms, existing users are urged to upgrade to 0.8rc8 IMMEDIATELY!

Thanks to PCheese for the heads-up. On recieving my first "Security Vulnerability Notice" this morning , I now feel like a "real" software developer!

So maybe those disappearing scores had nothing to do with file-locking, after all. Good news! PLUS now we have the finest file-locking code in the php universe! smiley for :lol:

onwards..

;o)
(or

ps.. all users who have mailed me regarding the machine have received a copy of 0.8rc8 in their email, and subscribers to my devlog newsfeed will notice a new entry. what else does one do in these situations? it has me thinking about compulsory email validation before download, or something. hmm.


phat - 08.03.06 7:05 pm

Hi cor,

I like it can I request you add an option to make the downloads and viewing work only within the domain. Basically adding an anti-leech for downloads and source viewing.

=D


next comments (2 pages)

First, confirm that you are human by entering the code you see..

(if you find the code difficult to decipher, click it for a new one!)


gd verification image

 

Welcome to corz.org!

I'm always messing around with the back-end.. See a bug? Wait a minute and try again. Still see a bug? Mail Me!