2015-11-06 2 views
9

EDIT 1Запись в TMP папке

Этот вопрос включает пользователя о 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:

enter image description here

В сценарии 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-адреса?

enter image description here

Put по-другому, не папка tmp должны быть вне папки public_html? Будет ли какая-то цель? Или я могу создать свою собственную папку tmp в пределах public_html, где она уже работает?


ORIGINAL ВОПРОС

Оригинальный вопрос был плохо написан. См. EDIT 1

Я играю с песочницей API (MangoPay). Я включил свой ClientId и ClientPassword, который, похоже, работает.

В API также говорит ...

Вы также должны установить путь к папке в $ API-> config-> TemporaryFolder что SDK необходим для хранения временных файлов. Этот путь должен находиться за пределами вашей папке www. Это может быть/tmp/or/var/tmp/или любое другое местоположение , на которое PHP может писать.

Я создал один на:

ftp://[email protected]/tmp/fakefoldername

Я бегу сценарий PHP с моего рабочего стола с помощью терминала. Выход он дает мне это

Невозможно создать или записать в файл ftp://[email protected]/tmp/fakefoldername

даже если я установить права доступа 777.

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

+1

Какая ОС вы используете? –

+0

@ Fred-ii- Я использую Linux с CPanel –

+1

Спасибо. Я добавил соответствующий тег и удалил «http», если все в порядке. Это может помочь вам получить более высокий уровень воздействия и быть связанными с рассматриваемой ОС. –

ответ

1

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

Вы заметите в документации MangoPay она показывает локальный реж:

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

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

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

+0

Несмотря на мою плохую формулировку, я считаю, что вы поняли, что я здесь делаю неправильно. Можно ли проверить мои изменения и подтвердить мои подозрения? (см. нижнюю часть редактирования жирным шрифтом). Благодаря! –

+0

Чтобы ответить на ваши другие вопросы: в этой папке 'tmp' будут размещаться файлы, которые * не * должны быть видимыми из Интернета (например, не видимы пользователями в их веб-браузере), поскольку в нем будут содержаться вещи, которые пользователи не предполагают чтобы иметь доступ. Помещая это в папку 'public_html', все в порядке, но не ожидайте, что сможете получить к нему доступ, как этот' http: // fake.com/tmp/', так как это не то, для чего предназначена папка tmp. – Ian

+0

Кроме того, согласно их документации, если у вас есть песочница, директория 'tmp' должна отличаться от вашего сайта без песочницы, поэтому при необходимости создайте два разных' mp' dirs. – Ian

0

вне коробки машина 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 свыше /tmphere).

Для других: SDK, который используется, вероятно, https://github.com/Mangopay/mangopay2-php-sdk

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

5

Я угадывание библиотеки, о которой идет речь, - this one, а ошибка, которую вы получаете, равна:

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 includes the FTP password
  3. убедитесь, что папка существует и FTP учетная запись имеет права на запись (777 должно хватить ...)
0

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

Смежные вопросы