tags:

views:

84

answers:

8

Hi everyone :)

I have a JavaScript file where I would like to include some php code. The problem is that I have a few defines on PHP that I would like to use on JS as well.

Is there any way of including a .js file in HTML allowing the server to first interpret it (before downloading to the client) using php?

Thanks :)

+5  A: 

Not tested, but it probably works:

<script lang="text/javascript" src="path/to/your/script.php" ></script>

Try to give the script .php as file extension.

Felix Kling
Yes, that works fine.
Alex JL
this will only has a chance of working if your PHP code is valid javascript syntax.
Jay
It isn't working for me but I also noticed that I'm requiring another php inside that might be creating problems :)
DiogoNeves
Downvoting is ok, but an explanation would be fine :)
Felix Kling
Jay, that seems to be the case
DiogoNeves
@Jay: Why? It is the same as embedding PHP in HTML. Of course you have to wrap your PHP code in `<?php ... ?>` the rest should be untouched be the PHP interpreter... or I don't get your point. And the JS code that you produce via PHP should be valid. But **PHP code** itself can never be *valid* JS code...
Felix Kling
@Jay I'm really, really sure that Felix realizes that the PHP has to output valid JS.
Alex JL
@Jay incorrect: The PHP code needs to *generate* javascript syntax. If we're already splitting hairs
Pekka
+9  A: 
<script src="/path/to/my/file.php"></script>

In file.php you'll also want to output the correct header. Before outputting anything else you should have:

header(Content-Type: text/javascript);

Cfreak
+1 for mentioning the header
Pekka
great, I managed to fail a few times but my mistake hehe cheers
DiogoNeves
+1  A: 

<script> global_one = '<?php echo $global_one; ?>';</script> Quick example ;) If you put this in your html <head> before all other javascript files the global_one variable will be available to all js files.

egis
A: 

Yes, just write a php file that outputs the JavaScript and include it in your page as you normally would, like

<?php $f=40; ?>
<script type='text/javascript>
   var f=<?php echo $f;?>;
</script>

The client does not care if the script file ends in .js, .php or whatever, just about the mime type and the contents.

You could also use Apache directives, perhaps in a .htaccess file, to tell it to process a certain .js file as PHP, or direct requests for filename.js to filename.php, though it's not necessary.

Alex JL
+3  A: 

Sure, most easily by making it a js.php file.

If possible, though, consider an alternative: Fetch the PHP defines into JavaScript before including the external script file:

 <script>
 define1 = <?php echo YOUR_DEFINE1; ?>
 define2 = <?php echo YOUR_DEFINE2; ?>
 </script>
 <script src="....."> // This script can now use define1 and define2

This way, the external JavaScript can still be served as a static content and doesn't need to be run through PHP. That is less resource intensive.

Pekka
+2  A: 
<script language="javascript" id="XYZ" src="XYZ.js" />
giri
I don't understand...
Felix Kling
+2  A: 

You can do this on a server level too. Say you're using apache, you can add this line to your configuration (even your .htaccess will do):

AddType application/x-httpd-php .js

You could also do that with css or even plain ol' html pages.

I'm sure other server software have similar capabilities.

Matthew
+3  A: 

Create a php file called javascript-test.php

<?php
header('Content-type: application/javascript');

$php = 'Hello World';
echo "alert('$php');";
?>

And then link to your php as if it was a javascript file:

<script type="text/javascript" src="javascript-test.php" />

If you need your php file to have a .js extension, that is possible in your server configuration.

Peter Johnson