include statement using a variable in the filename - php

(Please be patient, this does have something to do with include.) I am waiting for a domain to transfer over and am trying to set it up on the new hosting service ahead of time. I realized that on the old site all the path names were absolute, so all my links on the new host point to pages on the old host. I decided to make them all relative (for future possible moves also). I first did it like this:
index.php
include ('./header.php');
header.php
include "./panel.php";
panel.php
Contents of panel.
This works, and my page displays:
Contents of panel.
Then I decided to set a variable for the domain because I want to include this header file from files in subdirectories and I can use the domain variable to make an absolute path. Right now I have a temporary domain name, which I can change later to the real domain name when the transfer comes through. So I changed header.php to:
$domain="http://tempdomain.com"; //I can change this after the transfer
$panel=$domain."/panel.php";
echo $panel;
if ((include $panel) !== 1)
{
echo "<br>include failed";
}
What I get is:
http://tempdomain.com/panel.php
include failed
I've looked at various sites for include syntax, but I can't find any error in my code. All these files are in the / directory. Any ideas?

When you include, you have to give the directory structured, not the url.
Your hosting server path may be home/public/www/htdocs/your_directory_name/panel.php something like this. Then it will work.

remort include is also posiible
if
1. server's php.ini should allow it.
2. the file which will be included should not be preprossed before include. That means it must return unprocessed code :)

First, the allow_url_fopen flag must be set in php.ini. Otherwise remote include() cannot be done. Run var_dump(ini_get("allow_url_fopen")); to see if it is the case.
Second, "Windows versions of PHP prior to PHP 4.3.0 do not support access of remote files via this function, even if allow_url_fopen is enabled." - see PHP docs
Third, your remote PHP script must produce valid PHP code as output. If you include() via http, then not the script itself, but its output will be included.

Related

PHP Include from second domain/subdomain on same server

I try to include a php file from the same server but a different domain within a php site (domain.com).
include 'domain2.com/file.php';
the file should look like this for example:
echo 'test';
I now want the main site to have the file.php included to echo 'test' on the site.
However, it doesn't.
Does anybody have an idea how I could solve that?
My thoughts are the following, though I cannot solve it myself. Maybe they help you to come up with a solution:
It seems like it is included but the file.php does not return anything, because the php is being run on 'the other domain's server'. So the echo could be done in the other file, but is not included within the main site.
Note that if I include via path, it works:
include '../domain2/file.php';
Note also that allow_url_include and allow_url_fopen are allowed in the php.ini.

check if file exists on the sub directory

I tried to check for the existence of a file:
$center='412';
$dl ='download/D'.$center.'.zip';
if (file_exists($dl)) {
if I execute those script on the localhost, it's run properly or found the file, but if I execute on the web server, it's goes wrong or file not found. then I change the script as follows.
$center='412';
$dl ='/home/a1527507/public_html/sm/download/D'.$center.'.zip';
if (file_exists($dl)) {
a1527507 is my user id. it's still does not run properly. is there anything wrong from my script. Thank you for your help.
There are 2 potential issues here. The first script uses a relative directory. It assumes that 'download/D' is in the same working directory as the executing script. That may not be the case on your server. The second issue is that you are taking
$dl ='http://www.comze.com/sm/download/D'.$center.'.zip';
and checking for it's existence on the server which is most certainly will not as it's a URL.
I would recommend that you use an absolute directory to make sure you're checking the correct location for the file "/usr/local/nginx/html/downloads...". That will likely resolve this problem.
I strongly suggest you use the first script listed.
The issue here may be lack of directory permissions so you may need to use your ftp client to reconfigure the permissions for all files in the folder you are searching through. Try 7 for user 5 for group and 5 for world. Read more here: https://codex.wordpress.org/Changing_File_Permissions

Why PHP Server showing error on include() and required_once() functions?

I am using the php page includes in my site, it's perfectly working without error in localhost, but at the time of running this with a live web server it shows the error.
with using these functions
include("http-url/file.php") and required_once("http-url/file.php")
they are shows error like this
Warning: include(): http:// wrapper is disabled in the server
configuration by allow_url_include=0 in
www.mysite.com/....
with file inclution.........
what to do to solve this issue
Many developers include files by pointing to a remote URL, even if the file is within the local system. For example:
<?php include("http://example.com/includes/example_include.php"); ?>
With allow_url_include disabled, this method does not work. Instead, the file must be included with a local path, and there are three methods of doing this:
By using a relative path, such as ../includes/example_include.php.
By using an absolute path (also known as relative-from-root), such as /home/username/example.com/includes/example_include.php.
By using the PHP environment variable $_SERVER['DOCUMENT_ROOT'], which returns the absolute path to the web root directory. This is by far the best (and most portable) solution. The following example shows the environment variable in action.
Example Include
<?php include($_SERVER['DOCUMENT_ROOT']."/includes/example_include.php"); ?>
More about allow_url_include here

How to allow url_allow_include

I hope you all are in the best mood to help me in my problem .
Ok now I'm using a free hosting that doesn't allow url_allow_include , my domain is example.com and I wanna include a php file from eample2.com/file.php always when I want to do that it doesn't work , please I don't want answers that says contact your hosting provider to enable it for you. I wanna some trick using curl for example or anything else that will solve my problem and thanks in advance
Sure you don't want to hear it... But still, the answer is contact your hosting provider.
But before you do, let me tell you why you probably shouldn't do so in the first place:
If the PHP file you want to include is included over a url (that is with http:// in front of it) , you will be asking the webserver of example2.com to give you that file. The webserver will then run that file through PHP (thus already parsing that file) and give you the parsed HTML that the script produces. And you will end up including the parsed HTML in stead of the original contents of the PHP file you are trying to include.
If by any chance example.com and example2.com are hosted on the same machine, try including the desired file by using an absolute file path to that file. (eg include "/var/www/example2/yourPHPfile.php";)
Contact your host. Option #1 see if they can change that setting. Option #2 see if you can access the php.ini file and find that option in it and change the value. That's about the best you can do but also try this before both options and see if you get an error. If you do the host is blocking it and probably wont allow you to change it.
ini_set('allow_url_include', "0");

failed to open stream: no suitable wrapper could be found

hello i am implementing php files from one website into another and here is the following error message i am getting when trying to open the following page with implemented php files:
http://www.holidaysavers.ca/europe-destinations-canada.php
basically the php files i am importing from one website into another are identical , however they work on the original website but when i implement them into a new website it does not work anymore.
could you assist me in trying to get this resolved?
thank you
You can't include a PHP script that is on an external website/server into your local script - unless you enable allow_url_include on your php.ini (if you have access to it)
Instead, you can let that website/server render the page and get the resulting html output on your local script.
Replace this line in your script:
include('http://www.holidaysavers.ca/europe-canada.php?detour');
With this:
echo file_get_contents('http://www.holidaysavers.ca/europe-canada.php?detour');
Could you post the code from "europe-destinations-canada.php"? It looks like the script is asking to do stuff that's not configured in your php setup on this new site/server
I don't really know what kind of host you are using or if you are using Xampp, I do have an easy fix to it, for xampp and possibly other web server software. Go to your php.ini file, which you can search for or just look for it in c:\\xampp\php\php.ini, the php.ini should be in the php folder in the server software folder. Now search for allow_url_include in the php.ini file and than replace Off with On, if it isn't already on or something. This is most likely the fix because it worked for me.
I might be able to help further if I know if you are using a hosting or home server. If you are using a hosting website than please share what kind of hosting service you are using so I could inspect it further.
Using as example a random remote php file.
The goal is to use this remote file locally, make sure it hasn't change or be altered. The remote file will be downloaded one time only.
Hard coding the sha256 signature avoid to use the network on startup. This is just a base that can be turned to many scenarios, like checking for updates, depending your needs.
<?php
$lib_url = "https://raw.githubusercontent.com/getopt-php/getopt-php/master/src/CommandInterface.php";
$lib_filename = basename($lib_url);
// SHA256 signature
$lib_signature = hash_file("sha256",$lib_url); // "dba0b3fe70b52adbb8376be6a256d2cc371b2fe49ef35f0c6e15cd6d60c319dd"
// Hardcode the signature to avoid a network call on startup:
//$lib_signature = "dba0b3fe70b52adbb8376be6a256d2cc371b2fe49ef35f0c6e15cd6d60c319dd";
if (!is_file($lib_filename) || $lib_signature != hash_file("sha256",$lib_filename)){
// No local copy found, or file signature invalid, get a copy
copy($lib_url, $lib_filename);
}
require $lib_filename;
It is very useful if you intent to share a program as a single file, without composer.
For the case of a file hosted on Github, an ETag HTTP header is provided, it can be used to avoid to download the whole file.
php -r 'var_dump(json_decode(get_headers("https://raw.githubusercontent.com/getopt-php/getopt-php/master/src/CommandInterface.php", 1)["ETag"]));'
//string(64) "c0153dbd04652cc11cddb0876c5abcc9950cac7378960223cbbe6cf4833a0d6b"
The ETag HTTP response header is an identifier for a specific version
of a resource. It lets caches be more efficient and save bandwidth, as
a web server does not need to resend a full response if the content
has not changed.
Warning: include() [function.include]: URL file-access is disabled in the server configuration in /home/content/91/8151691/html/HolidaySavers.ca/europe-destinations-canada.php on line 52
says it all. I believe this is called XXS. It appears you're attempting to include a URL based file which is denied in your server configuration which is either one of two things.
You're attempting to include the file on site B from site A which you would then use instead of include('WhateverFile'); file_get_contents('WhateverFile'); however this will only return the client side data as it is an HTTP request;
You've duplicated the file on site B and forgot to update the domain configuration. Be sure that the include path reflects the site you're running the script on ie.
include(dir($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR . 'WhateverFile.php');
In any case. I would have to actually examine the line 52 on the said file to see why PHP is complaining to you in detail lol

Categories