Zend Framework - How to Properly set Include Path? - php

I'm trying to install TheStudio application which was apparently written using Zend Framework. My test server is running Ubuntu 12.04 and my application directory is stored in /home
My error log is stating
PHP Fatal error: require_once(): Failed opening required 'usr/share/php/libzend-frameworkphp/Zend/Loader/Autoloader.php'
(include_path='.:../library:../application/db:../application/models:../application/utils:../application/views/helpers:../application') in /home/application/config/config.php on line 22
Line 22 of config.php states:
require_once '/usr/share/php/libzend-framework-php/Zend/Loader/Autoloader.php';
The include path is as follows:
define('PS', PATH_SEPARATOR);
define('DS', DIRECTORY_SEPARATOR);
define('ROOT_DIR', dirname('home'));
// Modify include path
$paths = '.' . PS . '..' . DS . 'library'
. PS . '..' . DS . 'application' . DS . 'db'
. PS . '..' . DS . 'application' . DS . 'models'
. PS . '..' . DS . 'application' . DS . 'utils'
. PS . '..' . DS . 'application' . DS . 'views' . DS . 'helpers'
. PS . '..' . DS . 'application';
ini_set("include_path", $paths);
How should I modify the path statement to target the files located in /home directory? Are there other adjustments that should be made in order to resolve the above error?

/usr/share/php/libzend-frameworkphp is the default installation path for the Zend Framework Ubuntu package, so it seems this application is assuming that will be there. sudo apt-get install zend-framework should solve that problem.
I would say it's bad practice to include the full path on a require_once call, and there are way too many include paths being defined on your third code example (which I assume is from the app?).

Related

Overwrite block core file without custom module in Magento

I just want to know if I can create Product block in local code pool (i.e. \app\code\local\Mage\Catalog\Block\Product.php) without making my custom module just place this single file?
If so, will this local code pool block call or the core one call? If it would be the local one, please let me know why.
If you copy a code/core file to the code/local repository, the core file will be overwritten by the local file.
This is because of the include path order to load system files specified in app/Mage.php:
$paths = array();
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'local';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'community';
$paths[] = BP . DS . 'app' . DS . 'code' . DS . 'core';
$paths[] = BP . DS . 'lib';
So in your case the system will search for the Product.php in following order:
app/code/local/Mage/Catalog/Block/Product.php
app/code/community/Mage/Catalog/Block/Product.php
app/code/core/Mage/Catalog/Block/Product.php
lib/Mage/Catalog/Block/Product.php
If the system cannot find any of these files, it will throw an error.

php move_uploaded_file (Ubuntu)

i have problem with uploading file by move_uploaded_file function.. This return false, but $_FILES['myfile']['errors'] = 0 ... Permissions are 777 recursive for my project.. Directory's owner www-data.. How can i to see more info about problem? Help me please! I sow a lot of posts about this problem, but ewerywhere problem was incorrect permissions. I think me problem is different, because i have 777. First created directory mkdir(..., 0777), when i sow this not worked i open terminal and run sudo chmod -R 777 /var/www/myproject
Im sorry, my english isnt good.
if(isset($_FILES['path'])) {
$path = DS . 'images' . DS . 'admin' . DS . md5($_FILES['path']['name']) . DS;
if(!is_dir(ROOT_PATH . DS . 'public' . $path)) {
mkdir(ROOT_PATH . DS . 'public' . $path, 0777, true);
}
$r = move_uploaded_file($_FILES['path']['tmp_name'], ROOT_PATH . DS . 'public' . $path . $_FILES['path']['name']);
}

defined('SITE_ROOT') ? null - Error including file in Wordpress

i am new on wordpress and i am trying to merge a website with wordpress as a theme which contains its own php files and folders " forms, includes, ajax and others .. "
i am using this to define and call a path on my files
defined('SITE_ROOT') ? null : define('SITE_ROOT', DS . 'home' .DS . 'sitename' . DS . 'public_html');
when i tried to do this in wordpress , it doesnt work , so i typed the full path like this
defined('SITE_ROOT') ? null : define('SITE_ROOT', DS . 'home' .DS . 'sitename' . DS . 'public_html' . DS . 'wordpress' . DS . 'wp-content' . DS . 'themes' . DS . 'citation');
it works locally! .. i tried to upload it online and i changed the path to
defined('SITE_ROOT') ? null : define('SITE_ROOT', 'c:' .DS . 'wamp' . DS . 'www' . DS . 'wordpress' . DS . 'wp-content' . DS . 'themes' . DS . 'citation');
but it doesnt work.
after searching i found an absolute path for wordpress folder , then i tried it locally and it works!
defined('SITE_ROOT') ? null : define('SITE_ROOT', ABSPATH . DS . 'wp-content' . DS . 'themes' . DS . 'citation');
i tried it online but it doesnt work again ..
any one can help ?
You may use this syntax:
defined("SITE_ROOT") || define("SITE_ROOT", "provide url here");
But this is not the solution, just a nice shortcut for defining a constant, anyways, you don't need to do this, WorrdPress has TEMPLATEPATH, instead and also WordPress provided so any helper functions for this kind of things and one of those:
// Prints http://www.example.com/home/wp/wp-content/themes/yourThrme
echo get_bloginfo('template_url');
Or use
// prints http://www.example.com/home/wp/wp-content/themes/yourThrme
bloginfo('template_url');
Also, worth checking these available functions. Check WordPress Integration with other Website.

set_include_path function does not work, PHP 5.2.13

We are using a VPS server in our company and I'm trying to install Roundcube webmail interface
But I can't even get to the configuration phase because the set_include_path function doesn't work and the script can't find the required configuration files.
I get an error like "Fatal Error, ini_set/set_include_path function does not work."
I assume some php settings is causing this but I don't which one.
I'd be glad if I could get some help.
Thanks in advance
//EDIT Here is the codes from the script
ini_set('error_reporting', E_ALL&~E_NOTICE);
ini_set('display_errors', 1);
define('INSTALL_PATH', realpath(dirname(__FILE__) . '/../').'/');
define('RCMAIL_CONFIG_DIR', INSTALL_PATH . 'config');
$include_path = INSTALL_PATH . 'program/lib' . PATH_SEPARATOR;
$include_path .= INSTALL_PATH . 'program' . PATH_SEPARATOR;
$include_path .= INSTALL_PATH . 'program/include' . PATH_SEPARATOR;
$include_path .= ini_get('include_path');
set_include_path($include_path);
require_once 'utils.php';
require_once 'main.inc';
I'm doing this from memory, so it might not be quite right, but I think maybe you are confusing the path and directory separators. There may also be a nicer way to do this than what you are doing (i.e. assembling the whole path at once). Try something like this:
define('INSTALL_PATH', dirname(dirname(__FILE__)));
set_include_path(get_include_path() . PATH_SEPARATOR . INSTALL_PATH . DIRECTORY_SEPARATOR . 'program' . DIRECTORY_SEPARATOR . 'lib');
set_include_path(get_include_path() . PATH_SEPARATOR . INSTALL_PATH . DIRECTORY_SEPARATOR . 'program' . DIRECTORY_SEPARATOR . 'include');
set_include_path(get_include_path() . PATH_SEPARATOR . INSTALL_PATH . DIRECTORY_SEPARATOR . 'program');
Usually I compress this a little bit with implode, since DIRECTORY_SEPARATOR is so verbose:
...PATH_SEPARATOR . implode(DIRECTORY_SEPARATOR, Array(INSTALL_PATH, 'program', 'lib'));
I think by (most importantly) changing some of your PATHs to DIRECTORYs, and (possibly) using incremental get_include_path and set_include_path calls, it will be more readable, portable and just might work properly.

Strange behaviour for spl_autoload on phpfog

I'm just trying to build my first app on PHP Fog but there's a piece of code that doesn't run properly - works fine on localhost and other regular hosts though.
I use a modified version of TinyMVC, this is the code responsible for setting up autoloading:
/* Set include_path for spl_autoload */
set_include_path(get_include_path()
. PATH_SEPARATOR . FRAMEWORK_BASEDIR . 'core' . DS
. PATH_SEPARATOR . FRAMEWORK_BASEDIR . 'libraries' . DS
. PATH_SEPARATOR . FRAMEWORK_APPLICATION . DS . 'controllers' . DS
. PATH_SEPARATOR . FRAMEWORK_APPLICATION . DS . 'models' . DS
);
/* File extensions to include */
spl_autoload_extensions('.php,.inc');
/* Setup __autoload */
$spl_funcs = spl_autoload_functions();
if($spl_funcs === false)
spl_autoload_register();
elseif(!in_array('spl_autoload',$spl_funcs))
spl_autoload_register('spl_autoload');
Basically, it fails at the first class it should load, which is located in "FRAMEWORK_BASEDIR . 'core' . DS". The class filename is "framework_controller.php" and class name is "Framework_Controller" (tried lowercase as well). If I include the class manually it works but fails with autoload.
Here's the error message that I get:
Fatal error: spl_autoload(): Class Framework_Controller could not be loaded in /var/fog/apps/app7396/claudiu.phpfogapp.com/application/controllers/home.php on line 12
Any ideas as to what could the problem be?
I managed to sort it out:
function framework_autoload($className, $extList='.inc,.php') {
$autoload_paths = array (
FRAMEWORK_BASEDIR . 'core' . DS,
FRAMEWORK_BASEDIR . 'libraries' . DS,
FRAMEWORK_APPLICATION . DS . 'controllers' . DS,
FRAMEWORK_APPLICATION . DS . 'models' . DS
);
$ext = explode(',',$extList);
foreach($ext as $x) {
foreach ($autoload_paths as $v) {
$fname = $v . strtolower($className).$x;
if(#file_exists($fname)) {
require_once($fname);
return true;
}
}
}
return false;
}
spl_autoload_register('framework_autoload');
Thanks to another question here on StackOverflow: spl_autoload problem

Categories