写入tmp文件夹

时间:2015-11-06 13:28:16

标签: php linux rest command-line 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创建了以下具有以下权限的文件:

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已启用。

我不完全理解网址结构,所以问题可能就在那里?我尝试访问的tmp文件夹与我的public_html文件夹位于同一级别。也许我写的网址错了?

enter image description here

换句话说,tmp文件夹是否必须在public_html文件夹之外?这会有什么目的吗?或者我可以在tmp内创建自己的public_html文件夹吗?

原始问题

最初的问题写得不好。请参阅编辑1

我正在使用API​​的沙箱(MangoPay)。我已经包含了我的ClientId和ClientPassword,它似乎有效。

API也说......

  

您还需要在$ api-&gt; Config-&gt; TemporaryFolder中设置文件夹路径   SDK需要存储临时文件。这条路应该在外面   你的www文件夹。它可以是/ tmp /或/ var / tmp /或任何其他位置   PHP可以写入。

我在

创建了一个

ftp://fakedomain@fakedomain/tmp/fakefoldername

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

  

无法创建或写入文件   ftp://fakedomain@fakedomain/tmp/fakefoldername

即使我已将权限设置为777.

我知道为什么会收到此错误?

4 个答案:

答案 0 :(得分:5)

我猜这个图书馆是this one,你得到的错误是this exception

 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应该足够......)

答案 1 :(得分:1)

一般来说,临时目录应与您的代码位于同一台计算机上。使用FTP并不理想。您无法使用本地目录吗?

您将在MangoPay文档中注意到它显示了一个本地目录:

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

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

您应该坚持这一点,而不是通过FTP使用远程服务器。

答案 2 :(得分:0)

运行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而不是/tmp } here)。

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

以下有些类似的答案可能会有一些提示:

答案 3 :(得分:0)

最有可能的是,您的apache没有权限编写该文件夹,您必须确保使用相同的用户(在您的情况下为apache)以及chmod创建该目录。