невозможно скопировать файл .csv с Windows на сервер Linux с помощью переполнения стека

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

<?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');
}
?>

-3

Решение

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

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

производит

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

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

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

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

Если вы НАСТАИВАЕТЕ использовать обратную косую черту, то избегайте их везде:

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

чтобы их нельзя было интерпретировать как побеги / метачары.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector