pg_connect in php return false - php

I show phpinfo() info page has pgsql enable support
But in file php
$dbconn =pg_connect("host=localhost port=5432 dbname=qlbv user=postgres password=123456")
or die("can't connect db");
result of $dbconn is false;
I had config
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# IPv4 internet connections:
host all all 0.0.0.0/0 md5
# - Connection Settings -
listen_addresses='*'
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)
port = 5432 # (change requires restart)
I setup webserver in centos
result of $dbconn is false;
Can you help me?
thanks!

you try types:
getsebool -a | grep ftp
setsebool -P ftp_home_dir on
getsebool -a | grep ftp

Related

Can't connect remotely to MariaDB with PHP

I'm using a Raspberry Pi as a weather station and we are trying to connect it to a remote Linux server as the web server. We are running MariaDB as the MySQL database and the data is currently going smoothly from the sensors to the database. Unfortunately, we have been trying everything to connect our web server to our database.
This is the error we are receiving: "Can't connect to MySQL server on '192.168.x.xxx' (110)"
Port 3306 is opened on the router it is behind.
The only config file that I have been able to find that actually includes the bind-address line that I commented out was located here: /etc/mysql/mariadb.conf.d/50-server.cnf
When I run "sudo netstat -ntlup | grep mysql". This is returned:
tcp6 0 0 :::3306 :::* LISTEN 4481/mysqld
This is the 50-server.cnf file below:
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam_recover_options = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
#
# * Query Cache Configuration
#
query_cache_limit = 1M
query_cache_size = 16M
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Enable the slow query log to see queries with especially long duration
#slow_query_log_file = /var/log/mysql/mariadb-slow.log
#long_query_time = 10
#log_slow_rate_limit = 1000
#log_slow_verbosity = query_plan
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = exclude_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates you can use for example the GUI tool "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
#
# Accept only connections using the latest and most secure TLS protocol version.
# ..when MariaDB is compiled with OpenSSL:
# ssl-cipher=TLSv1.2
# ..when MariaDB is compiled with YaSSL (default in Debian):
# ssl=on
#
# * Character sets
#
# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full
# utf8 4-byte character set. See also client.cnf
#
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
#
# * Unix socket authentication plugin is built-in since 10.0.22-6
#
# Needed so the root database user can authenticate without a password but
# only when running as the unix root user.
#
# Also available for other users if required.
# See https://mariadb.com/kb/en/unix_socket-authentication-plugin/
# this is only for embedded server
[embedded]
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
# This group is only read by MariaDB-10.1 servers.
# If you use the same .cnf file for MariaDB of different versions,
# use this group for options that older servers don't understand
[mariadb-10.1]
This is the PHP file I am using to test the connection:
<?php
$con=mysqli_connect("192.168.x.xxx","team","password","Weather");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="SELECT * FROM WeatherData2";
$result=mysqli_query($con,$sql);
// Numeric array
$row=mysqli_fetch_array($result,MYSQLI_NUM);
printf ("%s (%s)\n",$row[1],$row[2], $row[3]);
// Associative array
$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
printf ("%s (%s)\n",$row["Date"],$row["Time"], $row["Temperature"]);
// Free result set
mysqli_free_result($result);
mysqli_close($con);
?>
Any help/suggestions would be greatly appreciated! Thank you!

Can't access mysql database after changing its directory

I am trying to connect to a mysql database and I keep getting this error:
pi#raspberrypi /var/lib/mysql $ sudo mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
After moving my database files onto an external flash drive (/media/my_flashdrive), then moving everything back to /var/lib/mysql:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock #ORIGINAL
#socket = /media/my_flashdrive/mysqldb/mysqld.sock #ADDED
port = 3306
basedir = /usr
datadir = /var/lib/mysql #ORIGINAL
#datadir = /media/my_flashdrive/mysqldb #ADDED
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address = 127.0.0.1 ###CHANGED
The permissions on all files inside the mysql folder are root. Can someone explain what I did wrong here?

Connect to postgresql server on amazon ec2 (Linux AMI) from PHP

I started an amazon ec2 instance (Linux AMI) , and installed postgresql 9.2.15 over it. I then went to the Security Group: mygroup-1 and opened the 5432 TCP Port:
Ports Protocol Source mygroup-1
80 tcp 0.0.0.0/0 ✔
5432 tcp 0.0.0.0/0 ✔
22 tcp 0.0.0.0/0 ✔
3389 tcp 0.0.0.0/0 ✔
443 tcp 0.0.0.0/0 ✔
I have created a database and user.
My /var/lib/pgsql9/data/pg_hba.conf looks like this:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 ident
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::1/128 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres trust
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident
and /var/lib/pgsql9/data/postgresql.conf looks like this:
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)
port = 5432 # (change requires restart)
from the local computer, I have successfully connected to the ec2 postgresql using pgAdmin 3 program with connection information:
host: Public IP of EC2 running
port: 5432
username: my-postgresql-user
password: my-postgresql-pass
But when I try to connect to postgresql from my website using PHP (my website placed in the path /var/www/html/mysite), it can't connect.
My code:
$host = "Public IP of EC2 running";
$port = "5432";
$name = "my-postgresql-database";
$user = "my-postgresql-user";
$pass = "my-postgresql-pass";
$connstr = "host=$host port=$port dbname=$database_name user=$user password=$pass";
pg_connect($connstr);
when I run on local computer, it is connected ok, but when uploaded to /var/www/html/mysite, it can't connect to database.
I tried replacing the variables $host = "localhost" or "Public DNS of EC2 running" but still can't connect.
Please help

PHP on CentOS 6.5 can not connect to Postgres DB [duplicate]

This question already has an answer here:
Can't Connect to PostgreSQL with PHP pg_connect()
(1 answer)
Closed 8 years ago.
I have a CentOS 6.5 virtual machine, which run on VirtualBox.
On it I have set up Apache, PHP, PHP Postgres extension (php-pgsql) and Postgres database.
I modified the pg_hba.conf file to allow connections:
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
host all all 192.168.0.0/24 trust
host all all 0.0.0.0/0 md5
This is my iptables file:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:8090
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:postgres
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Now, when I connect from my host machine (ip: 192.168.0.117) to Postgres with the client pgAdmin3 (user: postgres, password: postgres) I am able to do that and everything works fine but PHP running on my CentOS VM can not connect to database:
$connection_string = "host=localhost port=5432 dbname=rt_prezzario user=postgres password=postgres";
$resource = pg_connect($connection_string);
This is the warning that PHP triggers when I run those two code lines:
Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Permission denied Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432?
Anyone have suggestions?
SELinux is likely blocking the connection. You should be able to find a log entry in /var/log/messages when the connection was blocked.
Try setting this flag in SELinux:
setsebool -P httpd_can_network_connect_db on
RedHat has some documentation on this SELinux flag: 1

Cant load index.php page with apache using vagrant and virtualbox

This is my vagrantfile:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "ubuntu32"
config.vm.provision :shell, :path => "vagrant/inicio.sh"
# The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user's system.
config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-i386-vagrant-disk1.box"
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network :forwarded_port, guest: 80, host: 8085, auto_correct: true
config.vm.provider "virtualbox" do |v|
v.name = "funcook"
end
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network :private_network, ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network :public_network
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider :virtualbox do |vb|
# # Don't boot with headless mode
# vb.gui = true
#
# # Use VBoxManage to customize the VM. For example to change memory:
# vb.customize ["modifyvm", :id, "--memory", "1024"]
# end
#
# View the documentation for the provider you're using for more
# information on available options.
# Enable provisioning with Puppet stand alone. Puppet manifests
# are contained in a directory path relative to this Vagrantfile.
# You will need to create the manifests directory and a manifest in
# the file base.pp in the manifests_path directory.
#
# An example Puppet manifest to provision the message of the day:
#
# # group { "puppet":
# # ensure => "present",
# # }
# #
# # File { owner => 0, group => 0, mode => 0644 }
# #
# # file { '/etc/motd':
# # content => "Welcome to your Vagrant-built virtual machine!
# # Managed by Puppet.\n"
# # }
#
# config.vm.provision :puppet do |puppet|
# puppet.manifests_path = "manifests"
# puppet.manifest_file = "init.pp"
# end
# Enable provisioning with chef solo, specifying a cookbooks path, roles
# path, and data_bags path (all relative to this Vagrantfile), and adding
# some recipes and/or roles.
#
# config.vm.provision :chef_solo do |chef|
# chef.cookbooks_path = "../my-recipes/cookbooks"
# chef.roles_path = "../my-recipes/roles"
# chef.data_bags_path = "../my-recipes/data_bags"
# chef.add_recipe "mysql"
# chef.add_role "web"
#
# # You may also specify custom JSON attributes:
# chef.json = { :mysql_password => "foo" }
# end
# Enable provisioning with chef server, specifying the chef server URL,
# and the path to the validation key (relative to this Vagrantfile).
#
# The Opscode Platform uses HTTPS. Substitute your organization for
# ORGNAME in the URL and validation key.
#
# If you have your own Chef Server, use the appropriate URL, which may be
# HTTP instead of HTTPS depending on your configuration. Also change the
# validation key to validation.pem.
#
# config.vm.provision :chef_client do |chef|
# chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
# chef.validation_key_path = "ORGNAME-validator.pem"
# end
#
# If you're using the Opscode platform, your validator client is
# ORGNAME-validator, replacing ORGNAME with your organization name.
#
# If you have your own Chef Server, the default validation client name is
# chef-validator, unless you changed the configuration.
#
# chef.validation_client_name = "ORGNAME-validator"
end
And this is the content of inicio.sh:
#!/usr/bin/env bash
if [ ! -f ~/initial_provosioning_done ];
then
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y -q lamp-server^ php5-gd
sed -i 's,www-data,vagrant,g' /etc/apache2/envvars
sed -i 's,/var/www,/vagrant/www,g' /etc/apache2/sites-available/default
sed -i 's,AllowOverride None,AllowOverride All,g' /etc/apache2/sites-available/default
mysqladmin -u root password root
mysql -uroot -proot < /vagrant/bd/script.sql
rm -r /var/lock/apache2
a2enmod rewrite
service apache2 restart
touch ~/initial_provosioning_done
fi
This is how I am starting the VM:
minirafa:beta.funcook.com TONIWEB$ vagrant reload
[default] Attempting graceful shutdown of VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 80 => 8085 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Mounting shared folders...
[default] -- /vagrant
minirafa:beta.funcook.com TONIWEB$
The thing is that:
Chrome will log:
ERR_EMPTY_RESPONSE
and:
minirafa:~ TONIWEB$ curl 'http://localhost:80'
curl: (7) couldn't connect to host
Or:
minirafa:~ TONIWEB$ curl 'http://localhost:8085'
curl: (52) Empty reply from server
minirafa:~ TONIWEB$
Usually this settings work for me with other projects,
Any idea what could I try next?
-EDIT-
Also:
minirafa:beta.funcook.com TONIWEB$ curl -v http://localhost:8085
* About to connect() to localhost port 8085 (#0)
* Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 8085 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8y zlib/1.2.3
> Host: localhost:8085
> Accept: */*
>
* Empty reply from server
* Connection #0 to host localhost left intact
curl: (52) Empty reply from server
* Closing connection #0
minirafa:beta.funcook.com TONIWEB$
When you're trying to reach localhost on port 80 with curl, you're actually trying to reach the host machine (not the guest running in virtualbox/vagrant). So if the host doesn't run a webserver (on port 80), it's normal you get a couldn't connect to host message.
You should be trying to reach localhost on port 8085, because that's the port you're forwarding to port 80 on the guest machine. And that apparently tells you Empty reply from server...
I cannot say much about this, unless I can get some additional info about the webserver running on the guest:
Is it running properly? (check the error-logs)
Does it respond to requests from inside the guest machine?
Does the request from the host reach the webserver? (check the access-logs)
If so, does the webserver encounter errors? (check the error-logs)
If not, is there a firewall is running on the guest, dropping requests to port 80?
PS: Just a tip: You could create a private network on the guest by enabling this line:
config.vm.network :private_network, ip: "192.168.33.10"
This way you can reach the webserver at 192.168.33.10:80, and won't need to forward any ports to it.

Categories