【问题标题】:How to save file from URL to Sourceforge web server in PHP?如何在 PHP 中将文件从 URL 保存到 Sourceforge Web 服务器?
【发布时间】:2016-09-26 11:12:57
【问题描述】:

我在 SourceForge 上有一个简单的虚拟主机。 SourceForge 上的所有网络托管都使用 SFTP

现在,我想获取另一个服务器上的文件(我没有没有管理权限;但是,我可以在网络浏览器中正常查看它。例如:http://data.example.com/videos/fun.mp4。)到我的SourceForge 上的网络托管(托管结构为:/home/project-web/my-own-project/htdocs/my-folder)。

我已经阅读了许多问题的这些答案,例如:

我已经尝试了所有的答案。它显示成功消息;但是,我的服务器上没有文件。


然后,我尝试将 CHMOD 更改为777(我知道这是损坏的;所以,我尝试仅用于测试)。而且,也没有文件;在其他答案中,有一个空文件。

我使用phpinfo(); 来检查cURL,它(总是)启用。


你能告诉我我的工作清单有什么问题吗?并且,请告诉我:“如何通过 PHP 将文件从 URL 上传到 SourceForge 虚拟主机?”。


我的问题与 Stack Overflow 上的现有问题不重复
我使用 20 KB 文件进行测试;但是,我服务器上上传的文件是空的。

【问题讨论】:

  • 您是否测试过将空文件写入 Web 服务器托管,如果您可以将文件写入文件结构。例如尝试 file_put_contents('testfile.txt', 'success');将代码放入 php 文件并运行该 php 文件。在 php 文件所在的同一目录中查找 testfile.txt。如果你可以写文件,那么它可以被修复。
  • 好的。而且我忘了问,你是否在php.ini 中验证过allow_url_fopen 是否开启?说了你已经测试了 20KB 的文件,你的意思是说,你从某个 url 下载了 20kB 的文件到托管站点?
  • 请检查这是否有帮助。

标签: php curl upload sftp sourceforge


【解决方案1】:

更新根据使用政策:https://sourceforge.net/p/forge/documentation/Project%20Web%20and%20Developer%20Web/#outbound-connectivity

由于过去的滥用,从 Web 服务器对其他主机的出站访问 被严格禁止,并被防火墙规则阻止。这 包括访问其他 SourceForge.net 主机;唯一的例外 此政策是访问我们的项目数据库服务器并授权 传出的电子邮件。项目无法访问 SCM 服务器 网络服务器。其他 SourceForge.net 主机所需的任何内容 应检索并存储为文件或数据库条目,可能 然后从项目 Web 服务器上的脚本访问。虽然我们的 PHP 安装(和其他语言)包括对诸如 LDAP、IMAP 和 Postgres,我们不允许入站或出站 使用这些协议的连接。这些组件包括在内 第三方代码在部署时可能会保留 SourceForge.net 网络服务器;并支持项目的测试 需要这些函数的代码。

因此连接到外部主机的能力被防火墙阻止并且不可能。


请在您的问题中发布您的phpinfo() 输出。特别是系统详细信息(顶部)、核心、卷曲、套接字和标准部分值(省略任何机密信息,如数据库密码/连接)

有很多东西会阻止它保存,用户权限(在可执行文件上)、服务器配置、suPHP(沙盒用户)、chrooted web 目录、php 配置等。我们需要查看您的实际代码用于诊断您的specific issue

至于要尝试的东西,请使用此代码。

<?php

if (file_put_contents('/home/project-web/my-own-project/htdocs/my-folder/test.txt', 'Hello World!')) {
   echo 'File Saved Successfully!';
}

如果test.txt 存在并在您从SFTP 下载并打开它时显示Hello World!,请尝试以下操作。

在将新内容添加到服务器后,大多数 SFTP 客户端也需要刷新。因此,请确保您已刷新 SFTP 客户端。


<?php

umask(0000); //this sets everything this script interacts with as everyone writable/executable 
//(same as chmod(0777))

$output_path = '/home/project-web/my-own-project/htdocs/my-folder';
$out_file = 'fun.mp4';
$source = file_get_contents('http://data.example.com/videos/fun.mp4');
if (empty($source)) {
  die('No Content Received');
}
if (!@mkdir($output_path, 0777, true) && !is_dir($output_path)){
   die('Unable to create destination directory!');
}
if (file_put_contents($output_path . '/' . $out_file, $source)) {
   echo 'File Saved Successfully!';
}

我在我的网络服务器上使用5 MB MP4(特别是http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4 - mp4 下载的第一个谷歌结果)在我的网络服务器上测试了上述内容,它运行良好。

这将是让它发挥作用的最后努力。

【讨论】:

  • 好答案,+1 适合你。
猜你喜欢
  • 1970-01-01
  • 2019-07-23
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多