Я написал некоторый код для загрузки наших документов политики с нашего другого сервера:
for($i = 0; $i < count($newObject->policies); $i++) {
$newPolicy = $newObject->policies[$i];
$newPolicy->name = htmlspecialchars_decode(preg_replace("/(.*?)(\W+)?$/", "$1", $newPolicy->name)); //Fixes & etc, removes trailing spaces/dots/etc
$filePath = sprintf("../../Intranet Docs/Policies/%s/%s", $newPolicy->name, $newPolicy->version);
$fileName = sprintf("%s/%s", $filePath, $newPolicy->filename);
if(!file_exists($fileName)) {
if(!file_exists($filePath)) {
mkdir($filePath, 0777, true);
}
$downloadLink = sprintf("http://xxx/jhoots/documents/%s", rawurlencode($newPolicy->filename));
file_put_contents($fileName, fopen($downloadLink, 'r'));
exit;
}
}
Теперь этот код отлично работает для 90% документов.
Однако, когдаЯ попал в документ с таким именем:
Jhoots FD SOP 27.01a Платежи банковским поставщикам (прямые дебеты, постоянные поручения и платежные поручения) Процедура ввода SAGE.pdf
Я получаю следующее предупреждение:
Предупреждение: file_put_contents (../../ Документы / Политики / Jhoots Frants FD SOP 27.01a Банковские платежи поставщикам (прямые дебеты, постоянные заказы и BAC) Ввод SAGEПроцедура / 27.01a / Jhoots FD SOP 27.01a Платежи банковским поставщикам (прямые дебеты, постоянные поручения и платежные поручения) Процедура ввода SAGE.pdf) [function.file-put-contents]: не удалось открыть поток: нет такого файла или каталога
У меня была эта проблема со многими другими документами, но я исправил ее, реализовав метод rawurlencode
для переменной downloadLink
.
Я знаю, что это ЧТО-ТО связано скак это кодИмя, но я не могу понять это.
Если я повторяю ссылку на скачивание и открываю ее в своем браузере, он находит документ просто отлично.
Есть идеи?