Question

as I already mentioned in the title, I'm looking for a JS-function for getting the same result like I get with this PHP code:

dirname(dirname(__FILE__))

Thanks in advance!

Was it helpful?

Solution

I don't think it is possible because php dirname operates on apache server on local machine. It has access to the filesystem. But javascript operates on browser layer which can't operate with filesystem. I think so you should use ajax and proccess result how you need it. I think so its best solution for you.

OTHER TIPS

I needed a solution to write code like this:

$("#div").load(ROOT_URL + "my/path/to/script.php");

Solution: a PHP script generates one JS-file of all needed JS-files and adds the ROOT_URL to the top of the generated file:

$js = 'ROOT_URL = "' . ROOT_URL . '"; ' . $js;
file_put_contents("file.js", $js);

Now I'm able to use the ROOT_URL (set in a PHP config-file) in JS-code as well. I hope I could help.

You can have PHP output the script. Yes, that's right, you probably can't make php process js files (unless you are in full control of the server). But it doesn't matter. Just make sure that the MIME type is correct, both in the headers PHP returns and the script tag. That way, you can have PHP insert the any values you want in the script, including it's own path.

In script.php:

header("Content-type: text/javascript");
echo 'var myvar = '.$something;
//where $something can be $_SERVER['REQUEST_URI'], __FILE__ or whatever you need.
//You could even use information from session variables, or query the database.
//In fact, this way you can have GET parameters in your javascript.
//Make sure you are not creating a vulnerability with the exposed information.

//Then put the rest of the script as usual. You could even include it*.

*: include

In HTML:

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

Yes, I know I'm repeating the MIME type, do it this way to maximize browser compatibility.

There's no analogue of __FILE__ in browser Javascript; the code does not have direct access to the URL from which it was loaded. But with certain assumptions you can figure it out, as in the answer here.

Once you have the URL of the script (I assume in a variable called scriptURL below) you can set about finding the grandparent URL. This can get tricky with URLs, so it's probably safest to let the URL-savvy bits of Javascript parse the URL for you and get just the pathname component before you start with the string-munging:

var a = document.createElement('a')
a.href = scriptURL
var scriptPath = a.pathname

Then it's unfortunately down to string manipulation; here's one somewhat clunky solution:

var components = scriptPath.split(/\//)
while (components.length > 0 && !components[components.length-1])
    components.length -= 1;
var twoDirsUp = components.slice(0,components.length-2).join('/')

And then you can convert the result back into a full URL using the anchor element trick in reverse:

a.pathname = twoDirsUp;
var grandParentUrl = a.href

Why not load what you want from absolute URL?

If you have inse your block of codes: /my/script/to/load.js browser will load the correct file if you are in yoursite.com or whatever like yoursite.com/a/b/c/d/e/f

A little off topic, but if you just want to get the similar of dirname($_SERVER['REQUEST_URI']) for javascript, you can do

window.location.href.substr(0, window.location.href.length - window.location.href.split('/').pop().length)

I use something like that to free from the paths in javascript

 var __DIR__ = window.location.pathname.match('(.*\/).*')[1] + 'NameOfThisFolder';

first

window.location.pathname.match('(.*\/).*')[1]

return the current path without the file name or other stuff.

rootFolder/folder1/folder2/

then I add the name of this folder ('NameOfThisFolder').

In this way, I can make for instance ajax request in current page from a page that was called in turn from an ajax request without worry about the path

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top