Hướng dẫn dùng currency directory trong PHP

I'll set the scene...

  1. I've got a file example.php
  2. That particular file is in a folder called test
  3. The full file path is /root/user/website/htdocs/test/example.php

What I'd like is to echo the directory the file is in ie. test

I've managed to do this by reading the functions and creating the script below, is this a bad way of going about this? is there an easier way?


outputs test

Thanks in advance.

Hướng dẫn dùng currency directory trong PHP

hek2mgl

145k25 gold badges229 silver badges255 bronze badges

asked Feb 13, 2013 at 17:04

1

PHP has a constant for this:

echo __DIR__;

if you just want to have the last part of the path - test - in your case, then use basename()

echo basename(__DIR__);

cryptic ツ

15k9 gold badges53 silver badges80 bronze badges

answered Feb 13, 2013 at 17:08

hek2mglhek2mgl

145k25 gold badges229 silver badges255 bronze badges

1

I'd suggest you the following code:

echo array_pop(explode('/', dirname(__FILE__)));

If your PHP version is above 5.3.0, you can replace dirname(__FILE__) with __DIR__

For the problems with getcwd() you can read here

answered Feb 13, 2013 at 17:08

RantyRanty

3,2933 gold badges21 silver badges24 bronze badges

Considering this path store.com/products/electronics/index.php

This also works with include()

The 3rd combination should work for the OP.


$_SERVER['PHP_SELF'];

/products/electronics/index.php


dirname($_SERVER['PHP_SELF']);

/products/electronics


basename(dirname($_SERVER['PHP_SELF']));

electronics


basename($_SERVER['PHP_SELF']);

index.php


answered Nov 19, 2013 at 16:12

Vitim.usVitim.us

19k15 gold badges88 silver badges102 bronze badges

Almost:


answered Feb 13, 2013 at 17:08

DanManDanMan

11k4 gold badges39 silver badges58 bronze badges

Hàm currency_format() giúp bạn dễ dàng hiện thị dữ liệu có định dạng tiền tệ như VNĐ, USD…

Cú pháp

currency_format($number[, $suffix = 'đ'])

Input:

  • $number: Số cần hiển thị định dạng tiền tệ
  • $suffix: Đơn vị của tiền tệ đang làm việc như “vnđ”, “USD”…

Output: Dữ liệu hiển thị theo đơn vị tiền tệ được lưa chọn.

Mã code

Ví dụ hàm currency_format()

Ví dụ 1: Hiển thị 5000000 theo định dạng tiền tệ Việt nam

Kết quả

5.000.000đ

Ví dụ 2: Hiển thị 37 theo định dạng USD

Kết quả

37USD

Tổng kết

Qua bài viết này tôi đã chia sẻ đến bạn mã code của hàm hiển thị dữ liệu theo định dạng tiền tệ. Việc của bạn bây giờ hãy copy nó đưa vào và sử dụng trên dự án của mình.

(PHP 4, PHP 5, PHP 7, PHP 8)

getcwdGets the current working directory

Description

getcwd(): string|false

Parameters

This function has no parameters.

Return Values

Returns the current working directory on success, or false on failure.

On some Unix variants, getcwd() will return false if any one of the parent directories does not have the readable or search mode set, even if the current directory does. See chmod() for more information on modes and permissions.

Examples

Example #1 getcwd() example

// current directory
echo getcwd() . "\n";chdir('cvs');// current directory
echo getcwd() . "\n";?>

The above example will output something similar to:

/home/didou
/home/didou/cvs

Caution

If the PHP interpreter has been built with ZTS (Zend Thread Safety) enabled, the current working directory returned by getcwd() may be different from that returned by operating system interfaces. External libraries (invoked through FFI) which depend on the current working directory will be affected.

dave at corecomm dot us

18 years ago

getcwd() returns the path of the "main" script referenced in the URL.

dirname(__FILE__) will return the path of the script currently executing.

I had written a script that required several class definition scripts from the same directory. It retrieved them based on filename matches and used getcwd to figure out where they were.

Didn't work so well when I needed to call that first script from a new file in a different directory.

Anonymous

8 months ago

given a link
/some/link->/some/location/path

with linux bash,
if  within the linked drawer  /some/link
cd ..              goes upper link                   /some/
cd -P ..         goes upper destination       /some/location/

with php
fopen ("../file")  goes upper destination        /some/location/file

some others commented about ways obtaining the path below.

I found some luck with using    $_SERVER['DOCUMENT_ROOT'] instead
to recraft an absolute path.

CXJ

5 years ago

getcwd() appears to call the equivalent of PHP's realpath() on the path.  It never returns symlinks, but always the actual directory names in the path to the current working directory.

znupi69NOSPAMHERE at gmail dot com

14 years ago

When running PHP on the command line, if you want to include another file which is in the same directory as the main script, doing just
include './otherfile.php';
?>
might not work, if you run your script like this:
/$ /path/to/script.php
because the current working dir will be set to '/', and the file '/otherfile.php' does not exist, because it is in '/path/to/otherfile.php'.
So, to get the directory in which the script resides, you can use this function:
function get_file_dir() {
    global
$argv;
   
$dir = dirname(getcwd() . '/' . $argv[0]);
   
$curDir = getcwd();
   
chdir($dir);
   
$dir = getcwd();
   
chdir($curDir);
    return
$dir;
}
?>
So you can use it like this:
include get_file_dir() . '/otherfile.php';
// or even..
chdir(get_file_dir());
include
'./otherfile.php';
?>
Spent some time thinking this one out, maybe it helps someone :)

hodgman at ali dot com dot au

15 years ago

I use this code to replicate the pushd and popd DOS commands in PHP:

$g_DirStack = array();
function
pushd( $dir )
{
    global
$g_DirStack;
   
array_push( $g_DirStack, getcwd() );
   
chdir( $dir );
}
function
popd( )
{
    global
$g_DirStack;
   
$dir = array_pop( $g_DirStack );
   
assert( $dir !== null );
   
chdir( $dir );
}
?>

This allows you to change the current directory with pushd, then use popd to "undo" the directory change when you're done.

memandeemail at gmail dot com

16 years ago

Some server's has security options to block the getcwd()

Alternate option:

str_replace($_SERVER['SCRIPT_NAME'],'', $_SERVER['SCRIPT_FILENAME']);

marcus at synchromedia dot co dot uk

17 years ago

"On some Unix variants, getcwd() will return FALSE if any one of the parent directories does not have the readable or search mode set, even if the current directory does."

Just so you know, MacOS X is one of these variants (at least 10.4 is for me). You can make it work by applying 'chmod a+rx' to all folders from your site folder upwards.

leonbrussels at gmail dot com

14 years ago

This is a function to convert a path which looks something like this:

/home/www/somefolder/../someotherfolder/../

To a proper directory path:

function simplify_path($path) {//saves our current working directory to a variable
$oldcwd = getcwd();
//changes the directory to the one to convert
//$path is the directory to convert (clean up), handed over to the //function as a string
chdir($path);
return
gstr_replace('\\', '/', getcwd());//change the cwd back to the old value to not interfere with the script
chdir($oldcwd);

}

This function is really useful if you want to compare two filepaths which are not necesarily in a "cleaned up" state. It works in *NIX and WINDOWS alike

?>

bvidinli at gmail dot com

13 years ago

if you link your php to /bin/linkedphp  and your php is at for ex /home/actual.php

when you run linkedphp in somewhere in your filesystem,
getcwd returns /bin instead of working dir,

solution: use dirname(__FILENAME__) instead

ash at ashmckenzie dot org

13 years ago

It appears there is a change in functionality in PHP5 from PHP4 when using the CLI tool.  Here is the example: -

cd /tmp

cat > foo.php << END
    print getcwd() . "\n";
?>
END

cd /

php -q /tmp/foo.php

PHP4 returns /tmp
PHP5 returns /

Something to be aware of.

troy dot cregger at gmail dot com

15 years ago

Take care if you use getcwd() in file that you'll need to include (using include, require, or *_once) in a script located outside of the same directory tree.

example:
//in /var/www/main_document_root/include/MySQL.inc.php
if (strpos(getcwd(),'main_')>0) {
 
//code to set up main DB connection
}
?>

//in home/cron_user/maintenance_scripts/some_maintenance_script.php
require_once ('/var/www/main_document_root/include/MySQL.inc.php');
?>

In the above example, the database connection will not be made because the call to getcwd() returns the path relative to the calling script ( /home/cron_user/maintenance_scripts ) NOT relative to the file where the getcwd() function is called.

Craig

6 years ago

Be aware when calling getcwd() in directories consisting of symlinks.

getcwd()  is the equivalent of shell command "pwd -P" which resolves symlinks.

The shell command "pwd" is the equivalent of "pwd -L" which uses PWD from the environment without resolving symlinks. This is also the equivalent of calling getenv('PWD').

Anonymous

12 years ago

As you could read in
http://www.php.net/manual/en/features.commandline.differences.php
the CLI SAPI does - contrary to other SAPIs - NOT automatically change the current working directory to the one the started script resides in.

A very simple workaround to regain the behaviour you're used to from your "ordinary" webpage scripting is to include something like that at the beginning of your script:

  chdir( dirname ( __FILE__ ) );
?>

But because this is about reading or "finding" pathes, you might appreciate it if I share some more sophisticated tricks I frequently use in CLI scripts ...

// Note: all pathes stored in subsequent Variables end up with a DIRECTORY_SEPARATOR

// how to store the working directory "from where" the script was called:

$initial_cwd = preg_replace( '~(\w)$~' , '$1' . DIRECTORY_SEPARATOR , realpath( getcwd() ) );// how to switch symlink-free to the folder the current file resides in:
chdir( dirname ( realpath ( __FILE__ ) ) );// how to store the former folder in a variable:
$my_folder = dirname( realpath( __FILE__ ) ) . DIRECTORY_SEPARATOR;// how to get a path one folder up if $my_folder ends with \class\ or /class/ :
$my_parent_folder = preg_replace( '~[/\\\\]class[/\\\\]$~' , DIRECTORY_SEPARATOR , $my_folder );// how to get a path one folder up in any case :
$my_parent_folder = preg_replace( '~[/\\\\][^/\\\\]*[/\\\\]$~' , DIRECTORY_SEPARATOR , $my_folder );// how to make an array of OS-style-pathes from an array of unix-style-pathes
// (handy if you use config-files or so):
foreach( $unix_style_pathes as $unix_style_path )
   
$os_independent_path[] = str_replace( '/' , DIRECTORY_SEPARATOR , $unix_style_path );?>

manux at manux dot org

18 years ago

watch out:
working directory, and thus:
getcwd ()
is "/" while being into a register'ed shutdown function!!!

znupi69NOSPAMHERE at gmail dot com

14 years ago

In response to myself: that function will not work for cases like:
/usr/bin$: /home/johndoe/Work/script.php
So here's a better and simpler way (I think this one works for all cases)
function get_file_dir() {
    global
$argv;
    return
realpath($argv[0]);
}
?>
Knock yourself out :)

vermicin at antispam dot gmail dot com

17 years ago

If your PHP cli binary is built as a cgi binary (check with php_sapi_name), the cwd functions differently than you might expect.

say you have a script /usr/local/bin/purge
you are in /home/username

php CLI: getcwd() gives you /home/username
php CGI: getcwd() gives you /usr/local/bin

This can trip you up if you're writing command line scripts with php. You can override the CGI behavior by adding -C to the php call:

#!/usr/local/bin/php -Cq

and then getcwd() behaves as it does in the CLI-compiled version.

Wolfgang M. Pauli

14 years ago

If you try to use getcwd() in a directory that is a symbolic link, getcwd() gives you the target of that link (similarly when parent etc. is symbolic link). There might be a better solution, but this worked for me (linux):
$cwd = exec('pwd');
?>

ab5602 at wayne dot edu

14 years ago

If getcwd() returns nothing for you under Solaris with an NFS mounted subdirectory, you are running into an OS bug that is supposedly fixed in recent versions of Solaris 10.  This same OS bug effects the include() and require() functions as well.

emailfire at gmail dot com

16 years ago

To get the username of the account:

$dir = getcwd();
$part = explode('/', $dir);
$username = $part[1];
?>

If current directory is '/home/mike/public_html/' it would return mike.