2010-04-19 40 views

Trả lời

6

Đây là của tôi 1: 1 viết lại của normpath() phương pháp từ posixpath.py Python trong PHP:

function normpath($path) 
{ 
    if (empty($path)) 
     return '.'; 

    if (strpos($path, '/') === 0) 
     $initial_slashes = true; 
    else 
     $initial_slashes = false; 
    if (
     ($initial_slashes) && 
     (strpos($path, '//') === 0) && 
     (strpos($path, '///') === false) 
    ) 
     $initial_slashes = 2; 
    $initial_slashes = (int) $initial_slashes; 

    $comps = explode('/', $path); 
    $new_comps = array(); 
    foreach ($comps as $comp) 
    { 
     if (in_array($comp, array('', '.'))) 
      continue; 
     if (
      ($comp != '..') || 
      (!$initial_slashes && !$new_comps) || 
      ($new_comps && (end($new_comps) == '..')) 
     ) 
      array_push($new_comps, $comp); 
     elseif ($new_comps) 
      array_pop($new_comps); 
    } 
    $comps = $new_comps; 
    $path = implode('/', $comps); 
    if ($initial_slashes) 
     $path = str_repeat('/', $initial_slashes) . $path; 
    if ($path) 
     return $path; 
    else 
     return '.'; 
} 

này sẽ làm việc một cách chính xác giống như os.path.normpath() trong Python

2

Có, lệnh realpath sẽ trả lại đường dẫn chuẩn hóa. Nó tương tự như phiên bản kết hợp của os.path.normpathos.path.realpath của Python.

Tuy nhiên, nó cũng sẽ giải quyết các liên kết tượng trưng. Tôi không chắc bạn sẽ làm gì nếu bạn không muốn hành vi đó.

+0

Đường dẫn thực của PHP sẽ giống như đường dẫn os.path.abspath() hoặc os.path.realpath() – VolkerK

+0

@Gordon: Đường dẫn thực của PHP giống như một phiên bản kết hợp của os.path.normpath và os.path của Python. realpath. – Powerlord

+0

Tôi nghĩ rằng đây là gần nhất bạn có thể truy cập vào chức năng 'os.path.normpath()'. Hoặc là điều này hoặc không có (ít nhất) được xây dựng trong chức năng cho việc này. Nó phụ thuộc vào những gì OP thực sự cần ... –

Các vấn đề liên quan