开发者

How do I set relative paths in PHP?

开发者 https://www.devze.com 2023-03-26 06:45 出处:网络
I have an absolute path of (verified working) $target_path = \"F:/xampplite/htdocs/host_name/p/$email.$ext\";

I have an absolute path of (verified working)

  $target_path = "F:/xampplite/htdocs/host_name/p/$email.$ext";

for use in

move_uploaded_file($_FILES['ufile']['tmp_name'], $target_path

However开发者_JAVA技巧 when I move to a production server I need a relative path:


If /archemarks is at the root directory of your server, then this is the correct path. However, it is often better to do something like this:

$new_path = dirname(__FILE__) . "/../images/" . $new_image_name;

This takes the directory in which the current file is running, and saves the image into a directory called images that is at the same level as it.

In the above case, the currently running file might be:

/var/www/archemarks/include/upload.php

The image directory is:

/var/www/archemarks/images

For example, if /images was two directory levels higher than the current file is running in, use

$new_path = dirname(__FILE__) . "/../../images/" . $new_image_name;


$target_path = __DIR__ . "/archemarks/p/$email.$ext";


$target_path = "archemarks/p/$email.$ext";

notice the first "/"

/ => absolute, like /home

no "/" => relative to current folder


That is an absolute path. Relative paths do not begin with a /.

If this is the correct path for you on the production server, then PHP may be running in a chroot. This is a server configuration issue.


Assuming the /archemarks directory is directly below document root - and your example suggests that it is -, you could make the code independent of a specific OS or environment. Try using

$target_path = $_SERVER['DOCUMENT_ROOT'] . "/archemarks/p/$email.$ext";

as a generic path to your target location. Should work fine. This notation is also independent of the location of your script, or the current working directory.


Below is code for a php file uploader I wrote with a relative path. Hope it helps. In this case, the upload folder is in the same dir as my php file. you can go up a few levels and into a different dir using ../

<?php
if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get"))
@date_default_timezone_set('America/Anchorage');
ob_start();
session_start();

// Where the file is going to be placed 
$target_path = "uploads/" . date("Y/m/d") . "/" . session_id() . "/";
if(!file_exists( $target_path )){
    if (!mkdir($target_path, 0755, true))
        die("FAIL: Failed to create folders for upload.");
}

$maxFileSize = 1048576*3.5; /* in bytes */ 

/* Add the original filename to our target path.  
Result is "uploads/filename.extension" */
$index = 0;
$successFiles = array();
$failFiles = null;
$forceSend = false;
if($_SESSION["security_code"]!==$_POST["captcha"]){
    echo "captcha check failed, go back and try again";
    return;
}

foreach($_FILES['attached']['name'] as $k => $name) {
    if($name != null && !empty($name)){
        if($_FILES['attached']['size'][$index] < $maxFileSize ) {
            $tmp_target_path = $target_path . basename( $name );
            if(move_uploaded_file($_FILES['attached']['tmp_name'][$index], $tmp_target_path)) {
                $successFiles[] = array("file" => $tmp_target_path);
            } else{
                if($failFiles == null){
                    $failFiles = array();
                }
                $failFiles[] = array ("file" => basename( $name ), "reason" => "unable to copy the file on the server");
            }
        } else {
            if($failFiles == null){
                    $failFiles = array();
                }
                $failFiles[] = array ("file" => basename( $name ), "reason" => "file size was greater than 3.5 MB");
        }
        $index++;
    }   
}

?>

<?php 
    $response = "OK";
    if($failFiles != null){ 
        $response = "FAIL:" . "File upload failed for <br/>";
        foreach($failFiles as $k => $val) {
            $response .= "<b>" . $val['file'] . "</b> because " . $val['reason'] . "<br/>";
        }
    }

?>
<script language="javascript" type="text/javascript">
   window.top.window.uploadComplete("<?php echo $response; ?>");
</script>  
0

精彩评论

暂无评论...
验证码 换一张
取 消