3

So, I am trying to insert a file with a php include, but for some reason it doesn't work with the full URL.

This works:

<?php include 'menu.html' ?>

But this does not:

<?php include 'http://domainname.com/menu.html' ?>

Any ideas?

ultraloveninja
  • 1,969
  • 5
  • 27
  • 56
  • 1
    Is the server running on Windows? If so, note the [warning](http://php.net/manual/en/function.include.php) *"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."* – jedwards Nov 13 '12 at 22:02

6 Answers6

9

include is meant to include and evaluate a specified PHP file. If you fetch it locally, it can be processed like PHP - if you fetch it through a full URL, you will get the resulting HTML (in theory ... you may get only an error).

Supporting Docs

include 'menu.php' //Internally process a PHP file to generate HTML

or

file_get_contents('http://domainname.com/menu.php'); //Fetch resutling HTML
Dutchie432
  • 28,798
  • 20
  • 92
  • 109
8

check php.ini -

allow_url_include

but I have to say, if you don't have really really good reason, please don't use it. It's one of the worst php weaknesses, serious security threat.

Zdenek Machek
  • 1,758
  • 1
  • 20
  • 30
7

Does your php.ini allow you to use remote files with include?

If it's on your own domain then it makes no sense to require the absolute URL, as this would cause the server to open a connection to itself to retrieve the file via HTTP when a direct file operation would be so much simpler.

Niet the Dark Absol
  • 320,036
  • 81
  • 464
  • 592
  • Well, that's the thing. The dude who desinged the site before me thought it would be better to have the blog and the site (both wordpress) on two different installs and URL's. Then he made the entire menu static without using the wordpress menu functions. Blows my mind. Anyways, just looking for a simple solution to update the navigation in both places from one file. – ultraloveninja Nov 13 '12 at 22:35
2

Don't use absolute urls. Instead, try linking from the root directory. Like this:

$path = $_SERVER['DOCUMENT_ROOT']."/layer1/layer2/layer3/";
include($path."file.php");
1

An include tag is meant to be used to reference other PHP script files. If it is not a script that you are going to be processing, you might want to look into using:

$FileContents = file_get_contents("http://www.domainname.com/menu.html");
Matt Clark
  • 27,671
  • 19
  • 68
  • 123
0

Sounds like allow_url_fopen or allow_url_include or both have been set to 0 (disabled) in php.ini.

HTML should't be included in a PHP script, though. Other answers seem to address that issue as well.