I have read on alot of threads here on stackoverflow and also other tutorials on the internet but can't get this to work!
I have just setup a cake project, (used it in the past v1.3.7), and everything passes besides the database connection, i get the error message: Cake is NOT able to connect to the database.
I have already gotten pdo_mysql up and running so i know thats not the problem.
And i also know that the user and password can connect to the database thru the given ip/socket that i have tried.
This is the config that im trying to use:
public $Phenomenon = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'cake',
'password' => 'theCakePass',
'database' => 'Phenomenon',
);
(Also tried 127.0.0.1 instead of localhost)
So my question is: How can i get more verbose error messages so i can find out whats wrong? Or simply how do i solve this?
System Specs:
Mac OS X 10.7
Apache/2.2.20
PHP 5.3.9
Try connecting using vanilla PDO (not using cake); does that work?
And are you using Cake 2.0.5?
Related
My situation is the following. I have a cakephp project and a seperated plain php script running on the same server.
When I use my client browser to connect to the cakephp project, it builds up a session as it should.
Now I want to continue the session data with my plain php script. Again I use the same client browser to access the plain php script (so the request meta data should be the same and the session should be recognized) and I set cakephp session option to PHP.
'Session' => [
'defaults' => 'php',
],
However, I cant find out how to continue the session on the plain php script.
I would have assumed the following two lines of my plain php script would do the magic:
session_start();
echo json_encode($_SESSION);
Kind regards,
Marius
CakePHPs PHP session defaults (like all built-in defaults) do change the name of the cookie / the name of the session (session.name INI setting) to CAKEPHP:
https://github.com/cakephp/cakephp/blob/3.5.3/src/Network/Session.php#L133-L138
So you either have to change that to match the defaults used by your vanilla PHP app (which is most probably PHPSESSID, ie the PHP default):
'Session' => [
'defaults' => 'php',
'cookie' => session_name(), // would use the PHP default
],
// ...
or change the latter app to use the name configured for your CakePHP application:
session_name('CAKEPHP');
session_start();
// ...
Also make sure that the session.cookie_path and session.cookie_domain configuration covers both of your applications locations.
See also
Cookbook > Sessions > Session Configuration
Cookbook > Sessions > Setting ini directives
I have a problem using CakePHP with PHPUnit and Selenium and it is being INCREDIBLY difficult finding any help in the internet. I simply can't figure out how to identify in CakePHP that a request came from my Selenium agent, so that I can set the connection and database environment accordingly.
Any help would be highly appreciated! Further information regarding the best way to set my CakePHP app's database environment when requests come from Selenium are also most welcome.
The first step would be to set the user agent in Selenium to something your app would recognize as special. See the Selenium WebDriver Documentation.
Then in CakePHP you can use the global function env() to test the HTTP_USER_AGENT value. env is a wrapper for checking environment variables like $_SERVER.
For example in your database.php file:
var $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => '****',
'database' => 'production_db',
'prefix' => ''
);
function __construct() {
// set database connection settings for testing environment
if (stristr(env('HTTP_USER_AGENT'), 'selenium') {
$this->default['database'] = 'test_db';
}
}
If you can't set the user agent with Selenium, perhaps you could pass a get variable with the URL.
Example using Selenium extension for PHPUnit:
$this->setBrowserUrl('http://www.example.com?selenium=true');
In CakePHP you would access the variable in the $_GET array.
I am working on a legacy CakePHP 1.3 app and while I have years of experience with PHP, I am still finding my feet with CakePHP. I am following Chapter 4 'How to use the bakery' in Jamie Munro's Rapid Application Development with CakePHP, however the steps he suggests do not seem to go the way I'd expect them too.
I feel a good way of explaining this is going through the steps involved:
Following the books 'Hello World' example outlined in earlier chapters, I have setup a basic CakePHP app at this location on my machine: /home/public_html/helloworld.local. I can see the 'Hello World' example in a web browser on my local machine when I access: http://helloworld.local/users/add
Chapter 4 suggests that I move to this directory: home/public_html/helloworld.local/cake/console
I then run: ./cake bake
I get prompted to enter the location of the app and I add:
/home/public_html/helloworld.local/app
I then proceed to select defaults for the next few selections and there are no problems until I run into the line:
Your database configuration was not found. Take a moment to create one.
I do not understand this since there is a database file configured in ~/public_html/helloworld.local/app/config/database.php, and when I access the helloworld app outlined earlier (available on my local machine at http://helloworld.local/users/add), there is a database connection successfully established and records can be inserted.
I have also tried re-entering my database details when offered the chance to by cake bake, but end up with the error after succesfully adding the correct details:
Fatal error: Class 'DATABASE_CONFIG' not found in
/home/public_html/helloworld.local/cake/console/libs/tasks/db_config.php
on line 260
But either way, it should have found the existing database connection details, so not sure what is going on.
For using console command like cake bake you have to use your operating system terminal(for linux)/ command prompt(for windows). So you have to do the step mentioned in step 2 and 3 in you console. You can read documentation here to know how to use console commands.
Then, make sure that you have the file home/public_html/helloworld.local/app/config/database.php. I hope you removed .default from its name and rename it to database.php. To link up your database with your cakephp project you have to specify credentials in database.php.
var $default = array('driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => 'password',
'database' => 'database_name',
'prefix' => ''
);
I don't have a running CakePHP 1.3 installation here at hand, but this is what is happening at that location:
// #link: https://github.com/cakephp/cakephp/blob/1.3/cake/console/libs/tasks/db_config.php#L260
config('database');
$db = new $this->databaseClassName; // i.o.w. $db = new DATABASE_CONFIG;
This line:
config('database');
Does nothing more than including the database.php configuration file, simplified to;
include_once(CONFIGS . $arg . '.php'); // i.o.w. include_once(CONFIGS . 'database.php');
(https://github.com/cakephp/cakephp/blob/1.3/cake/basics.php#L77)
So IMO two problems may cause your error;
app/config/database.php was not found
You can try to check if this outputs the right path:
die(CONFIGS . 'database.php');
There is an error in your app/config/database.php, causing the DATABASE_CONFIG class to be malformed and unable to be initialized
A word of notice
Aparently your running 'bake' for everything including setting up a new database configuration. This may overwrite your
existing database configuration. It is possible to bake only parts of your application (e.g. bake controllers only or models).
The manual on baking in CakePHP 1.3 is located here:
http://book.cakephp.org/1.3/en/The-Manual/Core-Console-Applications/Code-Generation-with-Bake.html
And this
If this is your first CakePHP project, you should realy consider the option to upgrade to CakePHP 2.x CakePHP 1.3 is really outdated and, although it's still able to run fine, I wouldn't invest too much time in 1.3 as a lot of things have changed in CakePHP 2.x. It's probably better to start with CakePHP 2.x then to start with 1.3 and learn things that no longer work in CakePHP 2.
Copy your app/Config folder to app/Console, so the final path would be app/Console/Config. That worked for me.
In cakephp 1.2 we were using mysqli without any error, but I think in cakephp2.0.6 this facility has been removed. Can anybody suggest me how we can use mysqli in cakephp2.0.6.
Following code throwing error.
'datasource' => 'Database/Mysqli',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'dev',
'prefix' => ''
The reason that Database/Mysqli doesn't work as your datasource is that Model/Datasource/Database/Mysqli.php doesn't exist, and doesn't need to exist.
CakePHP 2.x uses PDO handle database communication. There is little to no reason to use MySQLi over PDO, since PDO gives you access to nearly all of the MySQLi capabilites and more. Named parameter binding alone is reason enough to prefer it over MySQLi, not to mention platform-independence.
That said, the actual driver being used is irrelevant since Cake handles all of the database interactions for you. Unless you have hacked behind Cake's database abstraction layer in your app, just use Database/Mysql and your app should work perfectly.
In case you're curious, here's a short overview of PDO vs MySQLi.
I have used CakePHP in my application. But it has a weird problem. Some times a user is
being automatically logged out after within few secs. How to stop this auto log out?
I have set below codes in my app/config/core.php:
Configure::write('Session.timeout', '120');
Configure::write('Security.level', 'low');
The best way is to set session time out in the app/Config/core.php.
Configure::write('Session', array(
'defaults' => 'php',
'timeout' => 20,//20minutes
'autoRegenerate' => true,//resets session on activity
'cookieTimeout' => 1440
));
I had a similar problem once. At that time the random loggin out stopped after I fixed a 404 request on one of the images called by a .css file. By that time I was running CakePHP 1.3 though and I have never had a similar issue on CakePHP 2.0
Its commentend on the answers for this question CakePHP session/auth logging out intermittently that:
The 404 request apparently can reset the Cake Auth/Session, not a generic PHP issue