2015-07-28 3 views
2

Я звоню функцию, которая передается строку, как показано нижеPHP побег в строки

$templateProcessor->saveAs('C:\xampp\htdocs\portal\templates\doc1.docx'); 

Проблема, мне нужно, чтобы это было больше похоже

$templateProcessor->saveAs('C:\xampp\htdocs\portal\templates\' . $this->fileName . '.docx'); 

Если я сделаю это, однако, мой перерывы строк, и я думаю, что это связано с обратными косыми чертами в строке.

Как я могу это решить?

p.s. Я на самом деле предпочел бы сделать что-то вроде этого

$templateProcessor->saveAs(dirname(__FILE__) . '../../templates/doc1.docx'); 

но оно не похоже, как мне с помощью ../../, потому что мне нужно выйти из текущего рабочего каталога.

Благодаря

ответ

3

Чтобы избежать обратной косой черты просто поместить дополнительный обратный слэш перед ними.

$fileName = 'file'; 
$path = 'C:\\xampp\\htdocs\\portal\\templates\\' . $fileName . '.docx'; 
print $path; 

Чтобы dirname работу, вам может понадобиться дополнительный слэш:

$path = dirname(__FILE__) . '/../../templates/doc1.docx'; 
print $path; 
2

пытаются изменить,

$templateProcessor->saveAs(dirname(__FILE__) . '../../templates/doc1.docx'); 

к

$templateProcessor->saveAs($_SERVER['DOCUMENT_ROOT'] . '/templates/doc1.docx'); 
1

Вы можете siomply избежать побег на используя двойной слэш

$templateProcessor-> 
saveAs('C:\xampp\htdocs\portal\templates\\' . $this->fileName . '.docx'); 
3

только последний символ обратной косой черты должны быть экранированы

$templateProcessor->saveAs('C:\xampp\htdocs\portal\templates\\' . $this->fileName . '.docx'); 

потому, что одиночные кавычки распознаются только \\ и \', обратная дробная черта интерпретируется как символ - так что вы спасались одинарную кавычку

посмотреть на этот ответ In PHP do i need to escape backslashes?

3

лучший ва у строить пути, вероятно, использовать константу DIRECTORY_SEPARATOR, так как он приспосабливается к ОС вы используете:

$path = implode(DIRECTORY_SEPARATOR, array('C:','xampp','htdocs','portal','templates',$this.filename.'.docx')); 
$templateProcessor->saveAs($path); 

Затем вы должны также положить свой путь в конфигурационном файле в случае, если вам нужно изменить его когда-нибудь.

В PHP 5.6 вы можете сделать вариационную функцию.

<?php 
/** 
* Builds a file path with the appropriate directory separator. 
* @param string $segments,... unlimited number of path segments 
* @return string Path 
*/ 
function file_build_path(...$segments) { 
    return join(DIRECTORY_SEPARATOR, $segments); 
} 

file_build_path("home", "alice", "Documents", "example.txt"); 
?> 

В более ранних версиях PHP вы можете использовать func_get_args.

<?php 
function file_build_path() { 
    return join(DIRECTORY_SEPARATOR, func_get_args($segments)); 
} 

file_build_path("home", "alice", "Documents", "example.txt"); 
?> 
Смежные вопросы