yii import extension not finding class - php

I am using the Facebook SDK For PHP.
I added the facebook php SDk in the yii app protected/extension folder and imported it in config/main.php as follow.
'import' => array(
'application.extensions.facebook.*',
),
my problem is that the app is not finding the classes in the sdk when i create the object as follows:
$session = new FacebookSession($access_token);
it is giving error as follow:
Fatal error: Class 'FacebookSession' not found ....
if I try using include_once() or require_once() then it is giving error as below:
Fatal error: Cannot redeclare class Facebook\FacebookSession in D:\localhost\protected\extensions\facebook\FacebookSession.php on line 36
What is going wrong?

Solved this by adding
set_include_path(Yii::app()->baseUrl . DIRECTORY_SEPARATOR . 'protected' . DIRECTORY_SEPARATOR . 'extensions' . DIRECTORY_SEPARATOR . 'facebook');
require_once (Yii::app()->baseUrl . DIRECTORY_SEPARATOR . 'protected' . DIRECTORY_SEPARATOR . 'extensions' . DIRECTORY_SEPARATOR . 'facebook' . DIRECTORY_SEPARATOR . 'autoload.php');
require_once (Yii::app()->baseUrl . DIRECTORY_SEPARATOR . 'protected' . DIRECTORY_SEPARATOR . 'extensions' . DIRECTORY_SEPARATOR . 'facebook' . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . 'Facebook' . DIRECTORY_SEPARATOR . 'FacebookSession.php');
and for creating object
$session = new Facebook\FacebookSession($access_token);

Nitin
Just Copy the zip file of your extnsion into your protected/extension directory and then extract that zip file to get .php file, try this..

Related

Why does composer autoload_static.php have error with php 5.5?

Composer gives error with php 5.5. Parse error in composer\autoload_static.php at line 10 - syntax error, unexpected '.', expecting ')'
and line 10 of that file is:
'34901568a1e26d13dd475cb2c85e0284' => __DIR__ . '/..' . '/zendframework/zend-form/autoload/formElementManagerPolyfill.php',
in the file below. It works fine with 5.6, but I don't understand what is its problem with 5.5? It seems a valid php. Please advise.
<?php
// autoload_static.php #generated by Composer
namespace Composer\Autoload;
class ComposerStaticInitf5fb4a6513c4bb8e1183f32a6d8a31be
{
public static $files = array (
'34901568a1e26d13dd475cb2c85e0284' => __DIR__ . '/..' . '/zendframework/zend-form/autoload/formElementManagerPolyfill.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'3e2471375464aac821502deb0ac64275' => __DIR__ . '/..' . '/symfony/polyfill-php54/bootstrap.php',
'6a47392539ca2329373e0d33e1dba053' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/bootstrap.php',
'67153d798259e2422f77ee379077b565' => __DIR__ . '/..' . '/minfraud/http/src/HTTPBase.php',
'038a1d49667b1c077e3f164315eba901' => __DIR__ . '/..' . '/minfraud/http/src/CreditCardFraudDetection.php',
);

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.

Javascript error on TinyMCE

I'm encountering a javascript error in a TinyMCE dialogue box when I try to insert a file into content. here's what I get: Uncaught typeError: Cannot read property 'length' of undefined ####.com/editor/jscripts/tiny_mce/plugins/Archiv/php/fileLoader.php?file=javascript 165
Initially I assumed the path was broken so I went over my links and realized everything was fine. I assumed it might have been a browser compatibility issue but tests on Safari, Firefox and even, sadly, IExplorer proved this wasn't the case. I then assumed the fault could have been with my version of TinyMCE and patched it with new files to no success. I'm at wits end! Please help, anyone.
This is the fileLoader.php:
<?php
switch($_GET['file']){
# Javascript files
case 'javascript':
header('Content-type: text/javascript');
readfile('..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'tiny_mce_popup.js')."\r\n\r\n";
readfile('..' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'flash_detect_min.js')."\r\n\r\n";
readfile('..' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'jquery' . DIRECTORY_SEPARATOR . 'jquery-1.3.2.min.js')."\r\n\r\n";
readfile('..' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'jquery' . DIRECTORY_SEPARATOR . 'jquery-ui-1.7.2.custom.min.js')."\r\n\r\n";
readfile('..' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'SWFupload' . DIRECTORY_SEPARATOR . 'swfupload.min.js')."\r\n\r\n";
readfile('..' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'json2.min.js')."\r\n\r\n";
readfile('..' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'SWFupload' . DIRECTORY_SEPARATOR . 'handlers.min.js')."\r\n\r\n";
readfile('..' . DIRECTORY_SEPARATOR . 'js' . DIRECTORY_SEPARATOR . 'archiv.min.js');
break;
# default 404
default:
header("HTTP/1.0 404 Not Found");
break;
}
?>
It sounds like the PHP is functioning as intended. The error you're mentioning is a Javascript error, as PHP does not use .length you won't see the error get length of undefined come from PHP.
Try including all of your JS files manually and see where the error is. It's likely one of the libraries is expecting an element to be on the page that isn't. If they're minified I would recommend using Source Maps.

Zend Framework - How to Properly set Include Path?

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?).

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