Когда я пытаюсь создать папку, имя которой разделено пробелами, оно берет только первое слово и игнорирует второе. Как мне это решить? Я пишу с помощью php для сервера dovecot Разделитель пространства, заданный LIST, является "/".

Код:

private const NEWLINE  = "\r\n";
private socket = fsockopen("ssl://testmail.com", 465, $errno, $errstr, 
20);
$foldername = "Hello World"
function createFolder($socket, $foldername) {
fputs($socket, "A3 Create " . $foldername . self::NEWLINE)

return read($socket);}

function read($socket)
{

stream_set_timeout($socket, 30);
$lines = [];

while(\FALSE !== ($line = fgets($socket))) {
    $lines[] = $line;

    if (\FALSE !== strpos($line, 'BAD')) {
        break;
    }

    if (\FALSE !== strpos($line, 'NO')) {
        break;
    }

    if (\FALSE !== strpos($line, 'OK')) {
        break;
    }

    if (\FALSE === strpos($line, 'OK')) {
        continue;
    }
}

return $lines;}

Я попытался избежать строк и написать это по-другому, но, похоже, ничего не работает. Он создает папку, но, как упоминалось выше, только с первым словом. Ответ сервера:

array(1) {[0]=>string(25) "A3 OK Create completed."}

Редактировать: вот некоторые из вещей, которые я попробовал, один раз, изменив fputs, а затем во время игры со строкой:

fputs($socket, "A3 Create " . \$foldername . self::NEWLINE)  Result: HTTP ERROR 500
fputs($socket, "A3 Create " . '$foldername' . self::NEWLINE) Result: $foldername
fputs($socket, "A3 Create " . "$foldername" . self::NEWLINE) Result: Hello
fputs($socket, "A3 Create " . '\$foldername . self::NEWLINE) Result: \$foldername
fputs($socket, "A3 Create " . 'Hello' . 'World' . self::NEWLINE)   Result: HelloWorld
fputs($socket, "A3 Create " . 'Hello ' . 'World' . self::NEWLINE)   Result: Hello
fputs($socket, "A3 Create " . "Hello " . "World" . self::NEWLINE)   Result: Hello


$foldername = "'Hello World'";         Result: 'Hello
$foldername = '"Hello  World"';        Result: Hello
$foldername = 'Hello World';           Result: Hello
$foldername = "'Hello \ World'";       Result: 'Hello
$foldername = "<<<EOD Hello World EOD";  Result: <<<EOD
$foldername = '<<<EOD Hello World EOD';  Result: <<<EOD
$foldername = <<<EOD Hello World EOD;  Result: Hello
$foldername = "%Hello  World%";        Result: %Hello
$foldername = '%Hello  World%';        Result: %Hello
$foldername = '\Hello  World';         Result: \Hello
$foldername = "\Hello  World";         Result: \Hello
0
Yranna 15 Апр 2019 в 10:20

2 ответа

Лучший ответ

Это работает: $foldername = '"Hello\\ World"';

1
Yranna 18 Апр 2019 в 08:10

Заключите его в кавычки и отправьте:

A4 CREATE "Folder Name"

PHP не мой язык, но, вероятно, что-то вроде $foldername = '"Folder Name"' даст вам то, что вы хотите.

0
Max 15 Апр 2019 в 13:42