РЕДАКТИРОВАТЬ 1
Этот вопрос затрагивает пользователя MANGOPAY API. Моя проблема в том, что я не могу получить API для записи в tmp
папка.
Мне удалось получить API для записи в http://fakedomain.com/apifolder/blank.txt
и получить соответствующий вывод.
Затем я запустил скрипт http://fake.com/apifolder/demos/iswrite.php
на http://fakedomain.com/apifolder/blank.txt
иметь минимальный рабочий код, который я мог бы проверить на tmp
папка. Вот код в скрипте:
<?php
$filename = 'blank.txt';
echo "<br>";
file_exists($filename);
echo "<br>";
if (file_exists($filename)) {
echo "The file $filename exists";
} else {
echo "The file $filename does not exist";
}
echo "<br>";
if (is_writable($filename)) {
echo 'The file is writable';
} else {
echo 'The file is not writable';
}
?>
Это дает мне выход
The file blank.txt exists
The file is writable
так что все хорошо там. Я создал следующий файл со следующими разрешениями, используя Filezilla:
В сценарии http://fake.com/apifolder/demos/iswrite.php
Я изменил переменную имени файла на $filename = 'http://fake.com/tmp/creative/blank.txt';
, Это дает мне следующий вывод:
The file http://fake.com/tmp/creative/blank.txt does not exist
The file is not writable
Также, allow_url_fopen
включен
Я не совсем понимаю структуру URL, так что, может быть, проблема в этом? Папка tmp, к которой я пытаюсь получить доступ, находится на том же уровне, что и моя public_html
папка. Может я неправильно пишу свои URL?
Другими словами, делает tmp
папка должна быть за пределами public_html
папка? Будет ли в этом какая-то цель? Или я могу создать свой собственный tmp
папка внутри public_html
где это уже работает?
ОРИГИНАЛЬНЫЙ ВОПРОС
Оригинальный вопрос был плохо написан. Пожалуйста см. РЕДАКТИРОВАТЬ 1
Я играю с песочницей API (MangoPay). Я включил мой ClientId и ClientPassword, который, кажется, работает.
API также говорит …
Вам также необходимо указать путь к папке в $ api-> Config-> TemporaryFolder
этот SDK должен хранить временные файлы. Этот путь должен быть снаружи
твоя папка www. Это может быть / tmp / или / var / tmp / или любое другое место
что PHP может писать.
Я создал один на:
ftp://fakedomain@fakedomain/tmp/fakefoldername
Я запускаю скрипт php со своего рабочего стола, используя терминал. Вывод, который он мне дает
Невозможно создать или записать в файл
ftp://fakedomain@fakedomain/tmp/fakefoldername
хотя я установил разрешения на 777.
Есть идеи, почему я получаю эту ошибку?
Вообще говоря, временный каталог должен находиться на той же машине, что и ваш код. Использование FTP менее чем идеально. Вы не можете использовать локальный каталог?
Вы заметите в документации MangoPay, что он показывает местный каталог:
https://github.com/Mangopay/mangopay2-php-sdk
$api->Config->TemporaryFolder = '/some/path/';
Вы, вероятно, должны придерживаться этого, вместо того, чтобы использовать удаленный сервер через FTP.
Я предполагаю, что рассматриваемая библиотека этот, и ошибка, которую вы получаете, это исключение:
if (!is_writable($this->GetPathToTemporaryFolder()))
throw new \MangoPay\Libraries\Exception('Cannot create or write to file ' . $this->GetPathToTemporaryFolder());
Так что в основном мы, кажется, отлаживаем вызов is_writable()
.
allow_url_fopen
находится наСтандартная Linux-машина с Ubuntu 14.04 имеет следующие настройки пользователя и разрешения
drwxrwxrwt 13 root root 4096 nov 9 00:56 tmp//
И фиктивный каталог
drwxrwxr-x 2 eric eric 4,0K nov 9 00:49 fakefoldername/
В случае перехода на 777
набор разрешений (как вы сказали, вы уже сделали это), это было бы
drwxrwxrwx 2 eric eric 4,0K nov 9 00:49 fakefoldername/
Важно отметить, что если вы использовали chmod 777 fakefoldername
это меняет набор разрешений только в каталог, не касаясь каких-либо файлов / каталогов в fakefoldername
(использование chmod -R 777 fakefoldername
). Еще один момент, о котором следует помнить, это то, что fakefoldername
Также необходимо иметь достаточное количество химической завивки. Для этого конкретного случая, проверьте, если /tmp
в папке они есть, исправьте при необходимости
sudo chmod 1777 tmp/
Кроме того, как указано выше, я бы попытался сделать еще один каталог в /var
каталог и посмотреть, как идут дела (хороший ответ, почему или не выбрать /var/tmp
над /tmp
Вот).
Для других: вероятно, используется SDK https://github.com/Mangopay/mangopay2-php-sdk
Могут быть некоторые подсказки в несколько похожих ответах ниже:
Скорее всего, у вашего apache нет прав на запись в эту папку, вы должны быть уверены, что создаете этот каталог с тем же пользователем (в вашем случае apache), а также с chmod.