Problems with PHP file_get_contents() on RHEL 6 - php

Ok, I have two Linux boxes running behind a proxy server. Both boxes are set to bypass the filtering by connecting on port 801.
Box A - Fedora Core 12 / PHP 5.3.1
Box B - RHEL 6 / PHP 5.3.3
On Box A I am able to use file_get_contents() to conenct to an external site.
<?php
$opts = array(
'http' => array(
'proxy' => 'tcp://10.136.132.1:801',
'request_fulluri' => true
)
);
$cxContext = stream_context_set_default($opts);
echo file_get_contents("http://www.google.com");
This results in Google's homepage being displayed.
On Box B I run the same code, but get this error:
Warning: file_get_contents(http://www.google.com): failed to open stream: Permission denied
Both boxes are on the same network and behind the same proxy server. Is there a setting I am missing in Apache or PHP that will allow file_get_contents to work on Box B?

It sounds like you have SELinux enabled, it blocks any outgoing connections by Apache by default. Try running this in your shell as root:
setsebool -P httpd_can_network_connect on
More info on SELinux booleans can be found here:
http://wiki.centos.org/TipsAndTricks/SelinuxBooleans

That could be because google blocks requests that seem to come from Bot or Script.
Maybe because Box A sets additional headers when requesting to google.
Try to open other website on Box b

Related

apache2 + MPM-ITK + PHP = socket doesn't work

I have 2 servers running an proprietary software that I can access by an specific port and sending/receiving JSON string.
In both servers, I have apache2 with ITK for each virtual host.
In server "A", I have an PHP script that uses socket to connect to server "A" and "B" to get data and display on webpage. The problem is that PHP can connect only to server "A" (localhsot), but can't connect to server "B". The PHP doesn't show any error (display_errors are on in php.ini) and when I try to get last error from socket (I don't remember the php function right now), I get nothing.
On apache log, I got this error:
Operation not permitted: AH02156: setgid: unable to set group id to
Group 0
There's no firewall blocking between hosts, I can 'telnet' both servers in any direction without any problem. Just PHP doesn't connect to 'external' hsot, just localhost.
The only change in my vhost file is to add itk option:
AssignUserId rpi rpi
So my question is: how to I configure apache-itk to allow my PHP to open external sockets?
I have tried to change LimitUIDRange to "LimitUIDRange 0 0", but no success.
maybe related to the Apache module:
mpm_itk_module
or
AssignUserId
Apache config.
Please see this links:
http://forum.ispsystem.com/showthread.php?t=2917
https://forum.root.cz/index.php?topic=15707.0
I'm trying to solve the same problem.
If you set LimitUIDRange 0 0, that means that only root is allowed, which doesn't make sense. The correct directives would be LimitUIDRange 0 65534 and LimitGIDRange 0 65534. As long as you don't set any hosts to be run as root, this is not any more insecure than default apache. Especialy does it not mean that website users are allowed to change their own user id. However, they will be allowed to run executables with the setuid bit set, like any other normal user.

set fopen() deadline with Wordpress on google-app-engine

I have Wordpress 3.8 running on google-app-engine. Everything works fine except the paypal return page with the s2Member® plugin. I think its related to an fopen() or URL fetch error.
The Server Scan By: s2Member® (http://www.s2member.com/kb/server-scanner) in my application reports following issue:
[ERROR] cURL Extension / Or fopen() URL One or more HTTP connection
tests failed against localhost. Cannot connect to self over HTTP —
possible DNS resolution issue. Can't connect to:
http://foto-box.appspot.com
In order to run s2Member®, your installation of PHP needs one of the
following...
Either the cURL extension for remote communication via PHP (plus the OpenSSL extension for PHP).
Or, set: allow_url_fopen = on in your php.ini file (and enable the OpenSSL extension for PHP).
The app-engine Log report is:
PHP Warning: file_get_contents(http://foto-box.appspot.com): failed
to open stream: Request deadline exceeded in
/base/data/home/apps/s~foto-box/3.372404596384852247/wordpress/s2-server-scanner.php
on line 1002
I know there is no cURL on app-engine, but fopen should work by default.
How do I exactly modify the deadline time to figure out if that is the problem?
Where do i have to include
deadline=60
or
$options = ["http" => ["timeout" => 60]];
$context = stream_context_create($options);
$data = file_get_contents("http://foo.bar", false, $context);
in my wordpress or app-engine files exactly to increase the timeout? php.ini, index.php,... or wp-config.php?
I had a look at the script - you can change the timeout on line 1000. It is currently 5 seconds, change it to something like 30 seconds.
if(is_resource($_fopen_test_resource = stream_context_create(array('http' => array('timeout' => 5.0, 'ignore_errors' => FALSE)))))
P.S. It might be a good idea not to run arbitrary scripts that you download from the internet - just sayin.

Blank pages shown by wamp server even after changing port number

When i run my wamp server and run localhost:80 in chrome browser, It is showing me blank page. Then i changed my port number to 84 in httpd.conf file. Even then it is showing blank page.
I tried with different port numbers(85, 86, 8084) and also stopped skype process which uses port 80.
Could any one suggest me how to solve this problem?
You'd likely get a 404 if your webserver were misconfigured. A blank page typically means a PHP error.
Check your error logs. You can find the log location in httpd.conf
Fix your PHP issue. The logs have the file and line number.
1) You have to restart wamp server every time you change something in your config
2) Set everything back to default in wamp server or just re-install it
3) Open up skype, go to Tools -> Options..., Go to Advanced -> Connection And uncheck Use port 80 and 443 as alternatives for incoming connections -> Save
4) Launch WAMP again -> enjoy :)
Same issue, here is the solution !
(there is more than one file to change in order to go to different port)
Cause :
Another program (Skype but not only) is using the port80 (which is by default the one used by wamp).
You can see it typing the following command "netstat -ano" and looking what is on "localadress 0.0.0.0.80", if you want to see the concerned program open, note the number at the end of the line (4 for example), then open taskmanager, services, and see who is on PID 4.
Solution :
Let's change wamp port to 81 !
Change wamp port from 80 to 81

file_get_contents - Connection timed out

<?php
$a = file_get_contents('http://www.google.com');
echo $
Why is the browser returning this error?
Warning: file_get_contents(http://www.google.com) [function.file-get-contents]: failed to open stream: Connection timed out in /home/test.php on line 2
Mostly probably your server cannot connect to an external resource, for example, because of firewall restrictions.
file_get_contents does not work well at all with getting remote files and should not be used. It does not deal with slow network connections or redirects, and does not return error codes. You should use curl instead to fetch remote files.
There is an example in the manual for curl_exec: http://us3.php.net/manual/en/function.curl-exec.php
I had the same problem, couldn't download using file_get_contents(), but using curl on the command line for the same URL worked fine. Turned out it tried to connect over IPv6 which failed.
I solved it by disabling IPv6 in my kernel parameters.
It might be server side issue, might be your server cannot communicate with other server remotely. You have to communicate with server administrator.
For some reason file_get_contents() fails intermittently on some websites that support IPv6 (maybe 20% of the time, the command times-out). Although disabling IPv6 resolves the issue, that is not the best solution as more sites move to IPv6.
I wrote a simple PHP gethtml() function that works around the issue using wget. This will automatically use IPv6 when IPv4 is not available. A minor drawback is that it uses an external command, but I think it is preferable to disabling IPv6.
If wget is not already installed on your distribution, you can install it as follows:
sudo apt install wget
PHP Function Example:
$myhtml = gethtml("http://example.com");
//use instead of file_get_contents() due to inconsistent IPv6 performance
function gethtml($url){return shell_exec("wget --prefer-family=IPv4 -qO- ".$url);}

http://localhost/ not working on Windows 7. What's the problem?

I have a big problem opening http://localhost/ on Windows 7 (beta). I installed this os and everything went great; when I installed Wamp I saw that localhost is not working at all. I just see this error:
Failed to Connect
Firefox can't establish a connection to the server at localhost.
in Mozilla and Explorer.
I removed Wamp and after some weeks (that means two weeks from today) I installed NetBeans on Windows 7. I created a test PHP script and when I debug it, I get the same error again. I tried to access it with ip 127.... but still the same. What is the problem?
When i installed NetBeans I installed it in port 8080.
If you installed it on port 8080, you need to access it on port 8080:
http://localhost:8080 or http://127.0.0.1:8080
To fix the port 80 problem do:
From cmd as administrator:
sc config http start= demand (you need a space after the equal sign and not before)
Reboot
Run the command (netsh http show servicestate) as administrator to check that the port 80 is in use
After you have run this command, you can disable http.sys as follows:
net stop http (stop the process)
Sc config http start= disabled (if you want to disable the service forever)
it works for me.
Edit your C:\Windows\System32\drivers\etc\hosts file
Make sure there is an entry that looks like this:
127.0.0.1 localhost
If there is an entry like
:: localhost
Comment it out to look like this
\#:: localhost
This should fix your problem, I've had this problem in the past.
For me, it was skype causing the problem. Once I stopped skype, everything worked. I have 1.7.1 xampp (mysql and apache) running on Windows 7 x64.
It sounds like you have no web server running at all anywhere.
Have you tried enabling IIS and using it to display a basic html file first?
Programs & Features -> Turn Windows Features On/Off -> Internet Information Servcies
Then, place your html file in C:\inetpub\wwwroot\index.html and browse to http://localhost.
Once this works, try to get WAMP/php working. Be careful of port conflicts.
My initial thought is that you are missing an entry in the hosts file. Something like "127.0.0.1 localhost", however, you mention that you are getting a 404 error. That means that the webserver is connecting to your client/browser and responding to the request for a particular webpage.
I'm not familiar enough with Windows 7, however, I'm pretty sure that it does not include a webserver by default. Also, unless you actually code, build and run a webserver application using netbeans you're not going to get the desired response.
When it comes down to it.... your issue is going to be one of the following:
1) you're serving static documents and the webserver is not configured to serve the files from whatever the proper DOCROOT should be. This includes PUBLIC folders in the user's directories. (the basic apache install include a basic homepage)
2) you have a dynamic webserver application where the controller is looking at the application path in order to decide what page to display or what function to execute. (see MVC - Controller). Basically incomplete implementation.
3) yet another configuration error: your website might actually define a virtual domain. (something other than localhost) so when you look for localhost in the URL the server might not be configured to provide a default page.
Uncommenting the following line in host file worked for me,
#127.0.0.1 localhost
Well you are getting a 404, so the web server is running, it just can't find the file.
Check the http.conf file. If it pointing to the right root directory?
If you are using different ports, then check http.conf to see if Apache is listening on the right port, or if apache is redirecting traffic on the port to anther root directory.
Maybe posting your http.conf file might help?
If you're still having this problem, try this:
Edit your hosts file (with elevated privileges)
Uncomment the line "#127.0.0.1 localhost" (ie- remove the #)
Save the file as is. hosts with no extension
In Win7 MS has decided to comment the localhost line with that msg that says it's handled in dns. I'm still not exactly clear what they're getting at, except maybe that they're telling folks to use dns for localhost resolution instead of the hosts file. Probably safer that way, anyway.
Yea, this was a pain for me as well.
So what i did was find the "Start Wampserver", just hit the start button and type it in.
Then right click on it , select properties.
I set it to run in XP servive pack 3 on the capatability tab.
I also checked the box "Run this program as an administrator".
Then I right clicked the WAMPSERVER on the System Tray, and re-started all services.
This worked perfect for me, hope this will help you as well.
Rob
Got any other Programs running ? msn ect... ? some bind to port 8080 then your webserver wouldnt start and would cause a 404 , try binding it to a different port 80 which its default should be
I got a 404 could not connect error then I set wampmanager.exe to run as Xp Sp3 and it seems to be working fine this can be done by
Right Clicking on it
Properties
click tab labled "Compatibility"
Tick Box just undeder "Compatibility
mode"
Select Windows XP (Service Pack 3)
Click Apply then OK
It was Skype interfering for me too. I changed the Skype settings (in Skype go to Tools > options > advanced > Connection and UNCHECK "use port 80 and 443 as alternatives for incoming connections") save then close Skype. I have Win 7 HomePremium 64 bit, had installed Xampp fine with MySQL running fine, but no matter how many times I started Apache (and console showed "Apache started") I still got the "firefox can't establish a connection" error in the browser. After Skype changes were saved, Apache showed the green "Running" and all working now thanks
For me this did the trick at port 80 in the end:
You have to disable the http.sys service manually via the registry:
Launch RegEdit:
Go to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP
Add a new DWORD (32-bit) value
Name it ‘NoRun’ not including the quotes
Double click the new property
In the Value data field type ’1' not including quotes and click OK
Re-boot your computer
You should now find that Apache will start on port 80!
Have you try the iis? Go to Control Panel->Programs and Features->Turn Windows features on or off (side bar). Try installing or reinstalling the Internet Information Service. I've a windows 7 with iis, with .net and php, and it works great...
you have to install the service, go to wamp->Apache->Service->Install service, then a command prompt window will pop up, then press enter, and after a few seconds go to the same route Services-> and click Start/Resume service, and you ready
I had the exact same issue, and the solution is what someone has already said:
In the taskbar, click on the WAMP icon.
Go to Apache-->Service-->Install Service
Then go back by clicking and selecting Apache-->Service-->Start/Resume Service
This will allow the localhost function to work (keep in mind I had already changed the host file located under c:\windows\system32\drivers\etc to remove the # from the 127.0.0.1 line)
If you need to edit that file still, you need to right click on it and select Properties. Then go to the Security tab, and click the Advanced button. You then need to select the Users, click Edit and select "Full Control". This will enable you to edit it.
That being said, you need to ALSO install the MySQL service following the same procedure.
MySQL-->Service-->Install Service
Then go back by right clicking yet again and selecting MySQL-->Service-->Start/Resume Service.
And that should fix it all up in Windows 7!
Before installing Wamp, go to controlpanel=> Adminstrative tools => IIS Manager and turn off the IIS server. Install wamp and everything works fine. When IIS is on it also uses port 80. You can go through a lot of changing the ports and permissions for wamp but I have found this the quickest and easiest method of getting wamp to run successfully.
Try adding the following tags in the wwwroot folder web.config file. These tags should be added as a child of the configuration tags as below.
-configuration-
--system.webServer--
---validation validateIntegratedModeConfiguration="false" ---
--/system.webServer--
-/configuration-
Maybe Skype or other Application is using port 80.
This you can check in
Tools->Settings->Advanced->Connection
See the above solutions are very good.But whenever you get this 404 eroor,first see this.I am sure the problem will be solved...
Just go to httpd.conf file by clicking wamp server symbol in bottom right taskbar-Apache->httpd.conf... or c:\\wampt\\bin\\apache\\apache2.2.1\\conf\\httpd.conf and approximate on line no 46 you will find "Listen 80"...just make sure it is written "80" after Listen...if it not then change it to 80...And your problem will be solved...
Assuming there is no problem doing a lookup on localhost (to 127.0.0.1), you need to make sure your server is listening to 127.0.0.1.
netstat works in both windows an UNIX. You probably need "netstat -a" to display listeners.

Categories