编辑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变量更改为$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
文件夹位于同一级别。也许我写的网址错了?
换句话说,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.
我知道为什么会收到此错误?
答案 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()
的调用。
allow_url_fopen
已开启答案 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创建该目录。