Запись в папку 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:

enter image description here

скрипт 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-адреса неправильно?

enter image description here

положите по-другому, делает 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().

  1. убедится allow_url_fopen на
  2. если применимо, убедитесь, что URL включает пароль FTP
  3. убедитесь, что папка существует и учетная запись 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.