• 0

[PHP] Classes and config outside public_html


Question

I'm just experimenting with building a site, and want to follow a patten I have used elsewhere...

Say my folder is called "WebSite1". Within that I have public_html which will contain all client-facing code and assets...

But outside it I want a folder called "Classes" that will contain my business objects. Also I'd like to have a config.whatever that contains things such as database connections.

I know this can be leveraged through Zend for example, but am looking at my own way to do this. Can someone tell me how?

Ta

12 answers to this question

Recommended Posts

  • 0

Where's the problem exactly? just tell apache that public_html is the root folder for your web application. That's all there is to it. Inside the php files in the public_html do include statements that you require from the Classes folder for example.

  • 0

I don't think you have fully understood.

I am looking to create a situation sort of like where I have a "Application Root" and a "Web Root". Public_html being the web root, and the folder that is above that being the app root.

I do not want to be declaring my includes and so on on each HTML page.

  • 0

It may be better to do something like that with mod_rewrite. Here is a snippet of old code which does a similar thing (I apologise for the poor quality of it in advance - it was written in about 5 minutes to accommodate something someone wanted hacked into their existing script and I wasn't being paid :p):

Note: classes belonging to the system begin mm_, are stored in inc/class_lib, and cannot be publicly called using the URL. Methods beginning _ can also not be called publicly, and there's some other things which help this such as is_public. mm_error and mm_system are the main system/error classes here:

// Class Loader
function __autoload($class_name) {

	// We give mm_ classes priority here:
	if(file_exists($_GLOBALS['root_path'] . "inc/class_lib/$class_name.class.php")) {
		require_once($_GLOBALS['root_path'] . "inc/class_lib/$class_name.class.php");
	} else {
		require_once($_GLOBALS['root_path'] . "application/controller/$class_name.php");
	}
}

// Create & Init System - **you can probably ignore this bit**
$GLOBALS['system'] = new mm_system();
$GLOBALS['system']->init();

// Load Required Class and Function
$class = $_GET['class'];
$func = $_GET['func'];
if(empty($class)) $class = $GLOBALS['default_class'];
if(empty($func)) $func = 'index';

if(substr($class, 0, 3) !== 'mm_' && file_exists($_GLOBALS['root_path'] . "application/controller/$class.php") && eval("return $class::is_public;")) {
	$page = new $class();
	if(method_exists($page, $func) && substr($func, 0, 1) !== '_') {
		$page->$func();
	} else {
		$page->unknown_method();
	}
} else {
	$page = new mm_error(102);
}

This is called by the url index.php?class=ClassName&func=FunctionName, which can be simply modified with mod_rewrite to be something like http://url/classname/function/variables

  • 0
Sorru for lack of updates. I went with Anthony's autoloader idea. However am looking at Zend or CodeIgnitor to use as a framework to work within with such things.

I would recommend CodeIgniter, although I wish that it would end support for PHP4 and bring on some new PHP5 features.

You could also use a pseudo-singleton controller to autoload all of the classes and achieve what you want in a fairly clean and efficient manner.

  • 0

If you're using Apache as your web server, you can put this in your application root's .htaccess file and it'll forward all outside requests to that folder.

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteRule ^$ public/ [L]

RewriteRule ^(.*)$ public/$1 [L]

</IfModule>

Replace 'public' (without the quotes) with the folder of your choice.

The first line (the first rule): send all requests for the root directory (without any files or directories, for example: http://example.com/) to the public directory (http://example.com/public/). Also, if there's a direct request for http://example.com/public/, it'll look for a folder called 'public' (without the quotes) inside the public directory (effectively http://example.com/public/public/). And the [L] option indicates that if the rule is successful, that rule will be the last one checked.

The second line: send all requests for anything to find anything inside the public directory (a request for http://example.com/index.php will be directed to http://example.com/public/index.php). And, like the above rule, stop checking all following rules.

  • 0
I would recommend CodeIgniter, although I wish that it would end support for PHP4 and bring on some new PHP5 features.

You could also use a pseudo-singleton controller to autoload all of the classes and achieve what you want in a fairly clean and efficient manner.

Kohana, originally a fork of Codeigniter, it shares less and less in common with it. It is easily my favourite framework and is written to a standard that I admire.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Snap Inc. launches new SPECS augmented reality glasses (for 'just' $2,195) by Aditya Tiwari Image: Snap Inc. Smartglasses powered by augmented reality are the latest fashion because the smartphone market is slowly reaching saturation. Snap Inc. announced its latest AR-powered smartglasses, called SPECS, that aim to strike a middle ground between underpowered AI glasses and heavy headsets you can't wear all the time. Available in two sizes, Snap SPECS are made from high-performance Swiss TR90 polymer and feature removable inserts to support prescription lenses. Its 47mm model weighs about 132g; the bigger 52mm model weighs 136g. Snap Inc has been spreading the word about the new glasses for a while now. Earlier this year, it even spun off its smart glasses team into a subsidiary called Specs Inc. Its proprietary LCOS (Liquid Crystal on Silicon) display delivers a 51-degree field of view and 16 million colors. Snap says the device gives the feel of a 24-inch desktop monitor when you're working, and of a 115-inch home cinema screen placed about 10 feet away when watching a movie. A pair of custom stereo speakers and 6x high-SNR MEMS microphones are built into the temples of the smartglasses to deliver open-ear audio while you cast a screen, stream content, open a whiteboard, or collaborate with others. Snap Inc. patted itself on the back, saying the smartglasses don't need tethering or a puck to connect to a computer. Under the hood, SPECS draw its power from two Snapdragon processors: one for computer vision and another for running Lenses. The device supports fast hand tracking, low latency, and responsive interactions that help digital content feel anchored in the real world, according to the company, which claims that SPECS can "deliver 7-millisecond motion-to-photon latency." The smartglasses offer up to four hours of battery life on a single charge while providing AI assistance, Bluetooth notifications, Lenses, audio/video playback, and more. The battery life could jump to 20 hours of mixed use when the charging case is included. Image: Snap Inc. You can view and interact with AR Lenses anchored directly to the physical world around you, and an on-board AI assistant uses the camera to see what's around to answer questions or provide real-time help with tasks. Snap Inc. noted that it filed more than 7,000 patents during the development of SPECS. It's trying to build the required digital ecosystem around the smartglasses, and said that developers have already published hundreds of Lenses for SPECS. Moreover, their electrochromic lenses use the same technology available in Boeing 787 Dreamliner windows, enabling them to shift from clear to tinted in just 10 seconds when you walk out of your house. Snap SPECS are now available for pre-order on the official website with a $2,195 price tag ($200 refundable deposit). The smartglasses are expected to ship in the US, UK, and France during the Fall this year.
    • Sound Booster 1.13 Build 575 by Razvan Serea Increase volume on your laptop. Boost the volume of even very quiet speakers. Raise volume above maximum. Letasoft Sound Booster can be used as an extra amplifier when the volume of the program you are listening to is too low for comfortable listening and you feel that your PC’s speakers can produce a louder sound. This can be the case when the audio or video has been recorded at the level below normal. Or, for example, when the other person’s microphone you are talking to on Skype, is not working properly. There can be a plenty of other reasons why the sound is being too quiet and there is not much you can do about it except buy external speakers. Sound of any application that is being played in the system can be amplified up to 500%. Letasoft Sound Booster can raise volume of programs like web browsers, on-line communication software (Teams, Discord, Zoom), any kind of media player or games. Simply put, volume of virtually any program that can play any sound in PC, can be boosted to a comfortable level with Letasoft Sound Booster. You can control current volume with the pop-up slider from the system tray. Alternatively, you can assign system-wide hot keys for increasing and decreasing, and use them when you need to adjust volume Letasoft Sound Booster constantly monitors current gain level and prevents samples from clipping, thus reducing all major sound distortions. Sound Booster 1.13 Build 575 changelog: usability improvements minor bug fixes Download: Letasoft Sound Booster 1.13.0.575 | 5.4 MB (14-Day Free Trial) View: Letasoft Website | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • I own these and the normal QuietComfort ones from Bose. The QC are amazing and I want to love these, but for the life of me, I have a terrible time getting them attached to my ears.
  • Recent Achievements

    • Conversation Starter
      NovaEdgeX earned a badge
      Conversation Starter
    • One Year In
      Console General earned a badge
      One Year In
    • One Year In
      Twozo Technologies earned a badge
      One Year In
    • One Month Later
      Twozo Technologies earned a badge
      One Month Later
    • Week One Done
      Twozo Technologies earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      506
    2. 2
      +Edouard
      184
    3. 3
      PsYcHoKiLLa
      108
    4. 4
      Steven P.
      89
    5. 5
      ATLien_0
      67
  • Tell a friend

    Love Neowin? Tell a friend!