Написать в папку tmp

РЕДАКТИРОВАТЬ 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.

Есть идеи, почему я получаю эту ошибку?

9

Решение

Вообще говоря, временный каталог должен находиться на той же машине, что и ваш код. Использование FTP менее чем идеально. Вы не можете использовать локальный каталог?

Вы заметите в документации MangoPay, что он показывает местный каталог:

https://github.com/Mangopay/mangopay2-php-sdk

$api->Config->TemporaryFolder = '/some/path/';

Вы, вероятно, должны придерживаться этого, вместо того, чтобы использовать удаленный сервер через FTP.

1

Другие решения

Я предполагаю, что рассматриваемая библиотека этот, и ошибка, которую вы получаете, это исключение:

 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 должно хватить …)
5

Стандартная 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

Могут быть некоторые подсказки в несколько похожих ответах ниже:

0

Скорее всего, у вашего apache нет прав на запись в эту папку, вы должны быть уверены, что создаете этот каталог с тем же пользователем (в вашем случае apache), а также с chmod.

0
По вопросам рекламы [email protected]