2011-12-04 27 views
0

我试图从服务器上使用unlink()函数用php删除文件。为什么在php中使用unlink()时会出现'Unable to locate stream wrapper'消息?

这里是我的代码:

$photo_to_delete = 'http://www.example.com/images/uploads/properties/197/IMG_0002.jpg'; 
unlink($photo_to_delete); 

以下是错误消息我得到:

警告:取消链接()[function.unlink]:无法找到在 流包装 /nfs/c09/h01/mnt/137110/domains/www.example.com/html/listers/edit_photos.php 在线43上

43行是我有unlink()函数的地方。

为什么在php中使用unlink()时会出现'Unable to locate stream wrapper'信息?

+2

感谢上帝,您没有拼错,并意外地做了'unlink(“http://www.google.com”);'。你永远不会听到它的结局! –

+0

@KerrekSB大声笑我会很生气! :P –

+0

这个URL应该是在你自己的/在同一台服务器上还是在其他服务器上? – deceze

回答

3

我很确定你不能像这样远程删除一个文件。尝试使用相对路径。甚至绝对路径(减去http://domain.com部分)。

换句话说:

unlink('/images/uploads/properties/197/IMG_0002.jpg'); // relative path 
unlink('/var/www/html/images/uploads/properties/197/IMG_0002.jpg'); // absolute 

或者更好的是,如果你要使用绝对路径,尝试用$_SERVER['DOCUMENT_ROOT']前缀它。

unlink($_SERVER['DOCUMENT_ROOT'] . '/images/uploads/properties/197/IMG_0002.jpg'); 
4

您不能通过HTTP协议,句点删除某些内容。
请参阅http://php.net/manual/en/wrappers.http.php的表格。

为了澄清,HTTP协议只做请求。您可能会发送一个基本上包含“请删除文件x”的请求,但需要在目标URL后面有一个服务器/程序/脚本,以实际满足此请求。你不能简单地要求随机URL删除自己。

0

如果要删除服务器上的文件(与php脚本运行时相同),请使用相对或绝对路径,如mmmshuddup所述。如果该文件位于其他地方,你应该使用某种网络协议进行文件管理,如FTP ...如果这是你的使用情况,你可以到这里看看:http://php.net/manual/en/function.ftp-delete.php

1

好吧,unlink()确实事实上界面PHP流封装器API,但大多数封装器不实现该方法。

HTTP有一个DELETE方法。但是你的服务器不太可能实现。 (虽然可以设置一个简单的Script DELETE /delete.php,显然不是非常明智的sans授权)
然后您需要curlhttp扩展名(或甚至fsockopen)实际发送适当的请求。

相关问题