Fatal error: Can't find core file. CakePHP - cakephp-2.0

After migrating to CakePHP 2.0, I uploaded it to my server and got these creepy errors.
Warning: include(/home/content/32/11382832/html/shafiullah/hs/app/Config/core.php) [function.include]: failed to open stream: No such file or directory in /home/content/32/11382832/html/shafiullah/hs/lib/Cake/Core/Configure.php on line 75
Warning: include() [function.include]: Failed opening '/home/content/32/11382832/html/shafiullah/hs/app/Config/core.php' for inclusion (include_path='/home/content/32/11382832/html/shafiullah/hs/lib:.:/usr/local/php5_3/lib/php') in /home/content/32/11382832/html/shafiullah/hs/lib/Cake/Core/Configure.php on line 75
Fatal error: Can't find application core file. Please create /home/content/32/11382832/html/shafiullah/hs/app/Config/core.php, and make sure it is readable by PHP. in /home/content/32/11382832/html/shafiullah/hs/lib/Cake/Core/Configure.php on line 76

in your webroot/index.php
//some code ...
define('CAKE_CORE_INCLUDE_PATH', ROOT);
//some code ...
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
if (function_exists('ini_set')) {
ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path'));
}
if (!include(ROOT.DS.APP_DIR.DS.'Cake' . DS . 'bootstrap.php')) {
$failed = true;
}
} else {
if (!include(CAKE_CORE_INCLUDE_PATH . DS . 'lib/Cake' . DS . 'bootstrap.php')) {
$failed = true;
}
}
And rename your views to "View", layouts to "Layouts" and config to "Config"

Related

Rackspace saving file in text formats

Using Zend framework 2 and saving files to cloud using "Zendservice-rackspace", here is my code for saving the file. The code is saving the file but in text format as when i go the link it show the text format, not the image or pdf format of the file
$fileName = $fileName.'_'.date('Ymd-His').".".$fileExt;
$fileData = file_get_contents($file['tmp_name']);
$rackspace = new Files($user,$key);
if ($rackspace->authenticate()) {
$rackspace->storeObject('Photos', $fileName, $fileData);
if ($rackspace->isSuccessful()) {
$cdnInfo = $rackspace->getInfoCdnContainer($module);
$url = $cdnInfo['cdn_uri_ssl'] . '/' . $fileName;
return $url;
} else{
echo json_encode(array(
'success'=>true,
'msg'=>'File uploading failed to server'));
exit;
}

CakePHP - Saving and serving files outside of webroot

Using Cake version 2.4.3 stable
So I am having a time here, I have modified this plug in to save files to the app folder https://github.com/srs81/CakePHP-AjaxMultiUpload/
The uploaded files are being saved to /public_html/app/files
Now the strange thing is, when trying to serve these files to the view, I can read the file name, the file size, but not the file itself, image, pdf, etc.
When I try to access the file via direct url, i get this error :
Error: FilesController could not be found.
How can it be that I can read the file name, the file size, but not the file itself?
There is a need to save the files in the app folder. These files should be protected and therefore only be accessed by users who are logged into the application. I have tried to use cake send file response with no outcome.
Edit : I guess the real question at hand here is how can I read files from APP . DS . 'files' ?
View code :
public function view ($model, $id, $edit=false) {
$results = $this->listing ($model, $id);
$directory = $results['directory'];
$baseUrl = $results['baseUrl'];
$files = $results['files'];
$str = "<dt>" . __("Pictures") . "</dt>\n<dd>";
$count = 0;
$webroot = Router::url("/") . "ajax_multi_upload";
foreach ($files as $file) {
$type = pathinfo($file, PATHINFO_EXTENSION);
$filesize = $this->format_bytes (filesize ($file));
$f = basename($file);
$url = $baseUrl . "/$f";
if ($edit) {
$baseEncFile = base64_encode ($file);
$delUrl = "$webroot/uploads/delete/$baseEncFile/";
$str .= "<a href='$delUrl'><img src='" . Router::url("/") .
"ajax_multi_upload/img/delete.png' alt='Delete' /></a> ";
}
$str .= "<img src='$url' /> ";
$str .= "<a href='$url'>" . $f . "</a> ($filesize)";
$str .= "<br />\n";
}
$str .= "</dd>\n";
return $str;
}
And the upload / save
public function upload($dir=null) {
// max file size in bytes
$size = Configure::read ('AMU.filesizeMB');
if (strlen($size) < 1) $size = 20;
$relPath = Configure::read ('AMU.directory');
if (strlen($relPath) < 1) $relPath = "files";
$sizeLimit = $size * 1024 * 1024;
$this->layout = "ajax";
Configure::write('debug', 0);
$directory = APP . DS . $relPath;
if ($dir === null) {
$this->set("result", "{\"error\":\"Upload controller was passed a null value.\"}");
return;
}
// Replace underscores delimiter with slash
$dir = str_replace ("___", "/", $dir);
$dir = $directory . DS . "$dir/";
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
$uploader = new qqFileUploader($this->allowedExtensions,
$sizeLimit);
$result = $uploader->handleUpload($dir);
$this->set("result", htmlspecialchars(json_encode($result), ENT_NOQUOTES));
}
The only real change from the original plug in is changing WWWROOT to APP to make the switch. Saving works fine and lovely. But its just weird that I can read the file name, file size in the view no problem but cannot view an image, pdf, etc.
The problem:
You cannot display files that are outside the webroot via a direct URL - that's the whole point in putting them above the webroot in the first place - to make them NOT directly accessible.
So building the image src path in the controller first (not good practice anyway) won't change the fact that when that path gets to the browser, and it reads the source of the image as trying to pull an image from above webroot, it won't/can't.
The Solution:
The solution is to use a CakePHP's Sending files (what used to be Media Views). Then, you set your img's "src" to a controller/action. In that action, it basically says "display this action as an image" (or pdf, or whatever else).
Path to use in Controller:
took this from one of my apps which is doing exactly the above, and here's the path I used for a file in 'files' (same level as webroot):
file_exists(APP . 'files' . DS . $your_filename)
Create a symbolic link to your folder inside of the webroot ;-)

Drupal 7 file module + php ftp function

I am using the file module to get some files from a form locally and upload to another server. When i try to upload large files it gives me timeout error (i have tried changing php.ini but that's not how i want it to work). That's why I am trying to upload the files via ftp functions. However, i cannot get the source path of the file that i just selected to upload (e.g filepath, not uri). I want to pass this filepath into fopen() function as a source. But i keep getting the error: *ftp_nb_fput() [function.ftp-nb-fput]: Can't open that file: No such file or directory in assets_managed_file_form_upload_submit() (line 303 of FILE_DIRECTORY).*
function assets_managed_file_form_upload_submit($form, &$form_state) {
for ($i = 0; $i < $form_state['num_files']; $i++) {
if ($form_state['values']['files_fieldset']['managed_field'][$i] != 0) {
// Make the file permanent.
$file = file_load($form_state['values']['files_fieldset']['managed_field'][$i]);
$local_path = file_create_url($file->uri);
//drupal_set_message(t("file->uri: " . $file->uri . " local path: " . $local_path));
$file->status = FILE_STATUS_PERMANENT;
$directory = 'private://cubbyhouse/'. $form_state['values']['allowed_user'];
file_prepare_directory($directory, FILE_CREATE_DIRECTORY);
$source = fopen($local_path,"r");
$conn = ftp_connect("FTP SERVER") or die("Could not connect");
ftp_login($conn,"USERNAME", "PASS");
$ftp_directory = TheDirectoryIwantToPutTheFile . $form_state['values']['allowed_user'];
$uri_parts = explode("/",$file->uri);
$filename = $uri_parts[sizeof($uri_parts)-1];
$target = $ftp_directory . "/" . $filename;
//drupal_set_message(t($target . " " . $file->uri));
$ret = ftp_nb_fput($conn,$target,$source,FTP_ASCII);
while ($ret == FTP_MOREDATA)
{
// Do whatever you want
//echo ".";
// Continue upload...
$ret = ftp_nb_continue($conn);
}
ftp_close($conn);
//$file->uri = file_unmanaged_copy($file->uri, $directory, FILE_EXISTS_REPLACE);
$file->uid = $form_state['values']['allowed_user'];
drupal_chmod($file->uri);
file_save($file);
// Need to add an entry in the file_usage table.
file_usage_add($file, 'assets', 'image', 1);
drupal_set_message(t("Your file has been uploaded!"));
}
}
}
I solved the problem. The problem was mainly because I gave the wrong path as the target. it had to be /public_html/...... instead of /home/our_name/public_html

how to perform cron job in cakephp?

# Cron Job for Cakephp #
I have create 1 file cron_scheduler.php which is copy of wamp/www/projectname/app/webroot/index.php file and it is also in the same folder
i have tried to run throw command prompt but didn't get any result.
how to run cronjob for Cakephp ? i don't have any idea
if anyone knows , please help me.
Thanks in advance.
<?php
if (!defined('DS')) {
define('DS', DIRECTORY_SEPARATOR);
}
/**
* These defines should only be edited if you have cake installed in
* a directory layout other than the way it is distributed.
* Each define has a commented line of code that explains what you
would change.
*
*/
if (!defined('ROOT')) {
//define('ROOT', 'FULL PATH TO DIRECTORY WHERE APP DIRECTORY IS
//LOCATED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
//You should also use the DS define to seperate your directories
define('ROOT', dirname(dirname(__FILE__)));
}
if (!defined('APP_DIR')) {
//define('APP_DIR', 'DIRECTORY NAME OF APPLICATION';
define('APP_DIR', basename(dirname(__FILE__)));
}
/**
* This only needs to be changed if the cake installed libs are located
* outside of the distributed directory structure.
*/
if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
//define ('CAKE_CORE_INCLUDE_PATH', FULL PATH TO DIRECTORY WHERE
//CAKE CORE IS INSTALLED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
//You should also use the DS define to seperate your directories
define('CAKE_CORE_INCLUDE_PATH', ROOT);
}
///////////////////////////////
//DO NOT EDIT BELOW THIS LINE//
///////////////////////////////
if (!defined('WEBROOT_DIR'))
{
define('WEBROOT_DIR', 'webroot');
}
if (!defined('WWW_ROOT')) {
//define('WWW_ROOT', dirname(__FILE__) . DS);
define('WWW_ROOT', dirname(__FILE__) . DS . 'webroot' . DS);
}
if (!defined('CORE_PATH')) {
if (function_exists('ini_set')) {
ini_set('include_path', CAKE_CORE_INCLUDE_PATH .
PATH_SEPARATOR .
ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'));
define('APP_PATH', null);
define('CORE_PATH', null);
} else {
define('APP_PATH', ROOT . DS . APP_DIR . DS);
define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
}
}
require CORE_PATH . 'cake' . DS . 'bootstrap.php';
define('CRON_DISPATCHER',true);
if($argc == 2)
{
$Dispatcher= new Dispatcher();
$Dispatcher->dispatch($argv[1]);
}
?>
> i have tried to run throw command promt but didn't get any result
> how to run cronjob for Cakephp ? i don't have any idea
if anyone knows , please help me.
Thanks
Step1: Create a shell file with name ReminderShell.php and Path should be PROJECT_DIR_PATH/PROJECT_NAME/app/Console/Command/ReminderShell.php Copy below script and paste it
class ReminderShell extends Shell {
var $tasks = array('Mail');
function main() {
$this->Mail->enroll_reminder();
}
}
Step2: Create Task file with name MailTask.php and path should be PROJECT_DIR_PATH/PROJECT_NAME/app/Console/Command/Task/MailTask.php
<?php
App::uses('CakeEmail', 'Network/Email');
class MailTask extends Shell {
var $uses = array('Contact');
public function enroll_reminder() {
$Email = new CakeEmail();
$Email->config('default');
$reminder = $this->Contact->find('all');
if (!empty($reminder)) {
foreach ($reminder as $val) {
$id = $val['Contact']['id'];
$name = $val['Contact']['first_name'];
$email = $val['Contact']['email'];
$Email->template('reminder')
->viewVars(array('fname' => $name))
->emailFormat('html')
->subject('xyz.com: Enrollment Reminder')
->to($email)
->from('noreply#xyz.com');
if ($Email->send()) {
$update_val['Contact']['id'] = $id;
$update_val['Contact']['enroll_reminder'] = 'sent';
$update_val['Contact']['enroll_reminder_date'] = date("Y-m-d H:i:s");
$this->Contact->save($update_val['Contact']);
$this->out($email.' Mail Sent');
}
}
}
}
Step3: Create a email template with name reminder.ctp and path should be PROJECT_DIR_PATH/PROJECT_NAME/app/View/Emails/html/reminder.ctp
Step4: Create email.php in config directory
Step5: Run below command in Terminal: Console/cake Reminder
PROJECT_DIR_PATH/PROJECT_NAME/app Console/cake Reminder
For complete files checkout from https://github.com/pankajkumarjha2010/cronjob-in-cakephp2.3.x
For cronjobs in CakePHP, you may have a look at http://book.cakephp.org/2.0/en/console-and-shells/cron-jobs.html. This works fine for me.
But please note, sometimes there are not all the environmental parameters available. I ran into this problem when accessing env('HTTP_HOST') within the cronjob methods. But when considering this, it should be no problem.

Who user only DB class from PERA?

I want to use only PEAR DB class, I try follow:
$pearPfad ="PEAR_DB-1.7.14/DB-1.7.14/DB.php";
error_reporting(E_ALL);
require_once($pearPfad);
$DB_dbType ="mysql";
$DB_user = "myuser";
$DB_pass = "mypassword";
$DB_host = "localhost";
$DB_dbName ="mydatabase";
$dsn = $DB_dbType . "://" // Build a DSN string (Data Source Name)
. $DB_user . ":" // Required by DB::connect()
. $DB_pass . "#"
. $DB_host . "/"
. $DB_dbName;
$db = DB::connect($dsn, TRUE);
if (DB::isError($db)) {
die("FEHLER: ".$db->getMessage() );
}
$sql = "SELECT id, title , created FROM h1z4e_content";
$res = $db->query($sql);
if (DB::isError($res)) {
die($res->getMessage());
}
while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
if (DB::isError($row)) {
die($row->getMessage());
}
print ("<p>Hey, it s:<br />" . $row->id . " " . $row->title . " ... and their freaky et: " . $row->created. "</p>\n");
}
$res->free();
// Similar to: mysql_free_resul
$db->disconnect();
But I get this error:
Warning: require_once(PEAR.php): failed to open stream: No such file or directory in /var/www/PEAR/PEAR_DB-1.7.14/DB-1.7.14/DB.php on line 30 Fatal error: require_once(): Failed opening required 'PEAR.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/PEAR/PEAR_DB-1.7.14/DB-1.7.14/DB.php on line 30
I found here in Stack Overflow this link: PHP-PEAR require_once('DB.php');
I don't want install PEAR on my computer.
I want only user PEAR DB class, is this possible without install PEAR?
Yes, but you need to set the include path correctly - in your case, to /full/path/to/PEAR_DB-1.7.14/DB-1.7.14/

Resources