2015-01-26 1 views
-3

В php я могу скопировать TXT-файл из местоположения на моей ОС Windows на сервер ubuntu, но по какой-то причине я не могу скопировать CSV-файл. Возможно, это что-то связано с Аппаррором? Вот мой код, который работает на 100% с .txt. Однако, если я пытаюсь использовать CSV-файл, он не работает.не может скопировать CSV-файл с Windows на Linux-сервер, используя php

<?php 
$fileName='Test.txt'; 
$location="C:\Users\...my location...\Local Store"; 
$Thispath = str_replace('\\', '/',$location).'/'; 
$ThisFile = $Thispath.$fileName; 

$dir = $_SERVER['DOCUMENT_ROOT'].'/services/csv/'; 
copy($ThisFile, $dir.$fileName); 

if (!file_exists($dir)) { 
echo 'no file'; 
} 
else{ 
echo 'file exists'; 
file_put_contents ($dir.'/hallo.txt', 'Goodbye File'); 
} 
?> 
+0

Какой результат вы получаете? – Naomi

+0

Состояние вопроса в том, как вы проверяете, сделал ли это файл csv или нет. – developerwjk

+0

Нет файла .csv, когда я использую WinSCP и проверяю этот каталог, тогда как при копировании файла .txt и там я проверяю его. – user983522

ответ

0

Не используйте обратную косую черту, чтобы указать путь в PHP, особенно при использовании строк в двойных кавычках:

$foo = "This\is\a\path\not\a\string"; 
echo $foo; 

производит

This\is\a\path 
ot\a\string 

Обратите внимание, как \n в \not было истолковано как символ новой строки, а не имя каталога, начинающееся с буквы n. PHP имеет NO Идея, какова конструкция пути/каталога. Он просто видит строки. И так как эта строка с двумя кавычками содержит символ новой строки, символ новой строки - это то, что вы получаете.

PHP будет автоматически конвертировать / в строку, используемую как путь к символам разделителя локальной операционной системы, для вас автоматически. Просто укажите все ваши пути с / и пусть PHP обрабатывать преобразование:

$foo = "C:/foo/bar/baz"; 

Если вы настаиваете на использование обратных косых черт, а затем правильно их избежать везде:

$foo = "C:\\foo\\bar\\baz"; 

, чтобы предотвратить их можно интерпретировать как побеги/metachars.

+0

Так что я не должен использовать str_replace? – user983522

+0

, если ваш путь содержал '\ n', тогда' \ n' будет GONE из строки, потому что он будет проанализирован как символ новой строки. Теперь ваш двухуровневый каталог 'klm \ nop' будет единственным каталогом' klm [newline] op', который не существует. –

+0

Я пытаюсь реализовать то, что вы предлагаете, но насколько он работает для файлов .txt, несмотря на обратную косую черту? – user983522

Смежные вопросы