为什么我得到'无法定位流包装器'在php中使用unlink()时的消息


Why am I getting a 'Unable to locate stream wrapper' message when using unlink() in php?

我正在尝试使用unlink()函数从服务器删除文件。

下面是我的代码:
$photo_to_delete = 'http://www.example.com/images/uploads/properties/197/IMG_0002.jpg';
unlink($photo_to_delete);

下面是我得到的错误信息:

警告:unlink() [function.]:无法定位流包装器在/nfs/c09/h01/mnt/137110/域www.example.com/html/listers/edit_photos.php第43行

第43行是unlink()函数所在的地方。

为什么我在php中使用unlink()时得到"无法找到流包装器"消息?

我很确定你不能像那样远程删除文件。尝试使用相对路径。或者甚至是绝对路径(减去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');

不能通过HTTP协议删除内容,句号。
详见http://php.net/manual/en/wrappers.http.php。

为了澄清,HTTP协议只处理请求。你可能会发送一个基本上包含"请删除文件x"的请求,但是在目标URL后面需要一个服务器/程序/脚本来实际实现这个请求。您不能简单地要求随机url删除它们自己。

好的,unlink()实际上与php的流包装器API接口,但大多数包装器不实现该方法。

HTTP有一个DELETE方法。但您的服务器不太可能实现了这一点。(虽然可以设置一个简单的Script DELETE /delete.php。显然,未经授权是不明智的!)
然后,您需要curlhttp扩展(甚至fsockopen)来实际为此发送适当的请求。

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