写入tmp文件夹

编辑1

这个问题涉及到MANGOPAY API的用户。 我的问题是,我不能让API写入到tmp文件夹。

我成功地让API写入http://fakedomain.com/apifolder/blank.txt并获得相应的输出。

然后我运行脚本http://fake.com/apifolder/demos/iswrite.phphttp://fakedomain.com/apifolder/blank.txt有最小的工作代码,我可以在tmp文件夹上testing。 这是脚本中的代码:

 <?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使用以下权限创build了以下文件:

在这里输入图像描述

在脚本http://fake.com/apifolder/demos/iswrite.php我已经改变了文件名variables$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文件夹之外? 这会有什么目的吗? 或者我可以在public_html里创build自己的tmp文件夹吗?


原文问题

原来的问题写得不好。 请参阅编辑1

我正在玩API( MangoPay )的沙箱。 我已经包含了我的ClientId和ClientPassword这似乎工作。

该API还说…

您还需要在$ api-> Config-> TemporaryFolder中设置一个文件夹path,SDK需要存储临时文件。 这个path应该在您的www文件夹之外。 它可能是/ tmp /或/ var / tmp /或PHP可以写入的其他位置。

我创build了一个:

ftp://fakedomain@fakedomain/tmp/fakefoldername

我使用terminal从我的桌面运行php脚本。 它给我的输出是

无法创build或写入文件的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()的调用。

  1. 确保allow_url_fopen已打开
  2. 如果适用,请确保URL包含FTP密码
  3. 确保文件夹存在和FTP帐户有写权限(777应该足够了…)

运行Ubuntu 14.04的开箱即用的Linux机器具有以下用户和权限设置

 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 over /tmp 在这里 )。

对于其他人:使用的SDK可能是https://github.com/Mangopay/mangopay2-php-sdk

下面有些类似的回答可能会提示一些提示:

最有可能的是,你的apache没有权限写这个文件夹,你必须确定你正在用相同的用户(在你的情况下,Apache)创建该目录,也是chmod。