编辑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
文件夹上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()
的调用。
allow_url_fopen
已打开 运行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。