Запись в папку tmp
правка 1
этот вопрос касается пользователя MANGOPAY API. Моя проблема в том, что я не могу получить API для записи в tmp
папка.
мне удалось получить API для записи в http://fakedomain.com/apifolder/blank.txt
и получение соответствующего вывода.
затем я запустил скрипт http://fake.com/apifolder/demos/iswrite.php
on 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 на $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 я пытаюсь открыть на том же уровне, как мой . Может быть, я пишу свои URL-адреса неправильно?
положите по-другому, делает tmp
папка должна быть вне ? Есть ли в этом смысл? Или я могу создать свой собственный внутри public_html
где он уже работает?
ОРИГИНАЛЬНЫЙ ВОПРОС
исходный вопрос был плохо написан. См. EDIT 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.
любую идею почему я получаю эту ошибку?
4 ответов
вообще говоря, temp dir должен быть расположен на той же машине, что и ваш код. Использование FTP менее чем идеально. Вы не можете использовать локальный каталог?
вы заметите, что в документации MangoPay он показывает локальный dir:
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
на - если применимо, убедитесь, что URL включает пароль FTP
- убедитесь, что папка существует и учетная запись FTP имеет права на запись (777 должно хватить...)
вне коробки 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
также необходимо иметь достаточные perms. Для этого конкретного случая проверьте, если /tmp
папка имеет их, исправить при необходимости
sudo chmod 1777 tmp/
кроме того, как указано выше, я бы попытался сделать другой каталог в /var
каталог и посмотреть, как идут дела (хороший ответ, почему или не выбрать /var/tmp
над /tmp
здесь).
для других: SDK, который используется, вероятно,https://github.com/Mangopay/mangopay2-php-sdk
могут быть некоторые подсказки в несколько похожих ответах ниже:
скорее всего, у вашего apache нет разрешений на запись этой папки, вы должны быть уверены, что создаете этот каталог с тем же пользователем (в вашем случае apache), а также chmod.