Учитывая ваш код, я бы попытался, во-первых, удалить одиночные кавычки, которые вы вставляете вокруг параметра: в них нет необходимости, поскольку вы используете escapeshellarg
.
Например, файл temp.php
может содержать:
$spool = "ab cd/";
$file = "gh ij";
system("sh ./test.sh " . escapeshellarg($spool . $file) . "");
А test.sh
:
#!/bin/bash
INFILE=$1
echo $1
С этими данными вывод:
$ php temp.php
ab cd/gh ij
Что похоже на то, что вы ожидаете.
Если я положу обратно одинарные кавычки, как это:
system("sh ./test.sh '" . escapeshellarg($spool . $file) . "'");
Выход снова прерван:
$ php temp.php
ab
escapeshellarg
экранирует данные для вас (с правильными кавычками и всем этим, в зависимости от операционной системы) , вам не нужно делать это самостоятельно.