- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试将大量数据写入通过 php 中的 fopen() 打开的文件。我使用的协议(protocol)包装器是 ftp,因此该文件对于运行 php 代码的服务器来说是远程的。我要写入的文件位于 Windows 服务器上。
我证实该文件确实是由我的 php 代码创建的,但问题是文件中的数据不存在 (0KB) 或写入文件过早停止。不知道为什么会这样。
这是我用来处理操作的代码:
$file_handle = fopen($node['ftp'].$path_to_lut, "wb", 0, $node['ftp_context']);
include_once($file);
if ($file_handle)
{
fwrite($file_handle, $string); //$string is inside included $file
fclose($file_handle);
} else {
die('There was a problem opening the file.');
}
当我将它托管在我的本地机器上时,这段代码工作正常,但是当我将它上传到我的网络主机 (Rackspace Cloud) 时,它失败了。这让我相信这是一个与我在 Rackspace 的服务器配置相关的问题,但我想知道我是否可以对我的 php 代码做些什么来使其更健壮。
有什么想法可以确保 fwrite 真正完成将字符串写入远程机器?
谢谢!
好吧,我把写入文件的代码改成了这样:
if ($file_handle)
{
if ($bytesWritten = fwrite($file_handle, $string) ) {
echo "There were " . $bytesWritten . " bytes written to the text file.";
}
if (!fflush($file_handle)) {
die("There was a problem outputting all the data to the text file.");
}
if (!fclose($file_handle)) {
die("There was a problem closing the text file.");
}
} else {
die("No file to write data to. Sorry.");
}
奇怪的是回显语句显示如下:
There were 10330 bytes written to the text file.
然而,当我通过 FTP 验证文本文件大小时,它显示它为 0K,并且文件中的数据实际上被截断了。我无法想象它与 FTP 服务器本身有关,因为如果 PHP 托管在 Rackspace Cloud 以外的机器上,它就可以工作。
**更新**我与一位 Rackspace Cloud 代表谈过,他提到如果您要从他们的服务器进行 ftp,他们需要被动 ftp。我将远程服务器设置为处理被动 ftp 连接,并已验证被动 ftp 现在可以通过 OSX Transmit ftp 客户端在远程服务器上运行。我补充说:
ftp_pasv($file_handle, true);
紧接在 fopen() 语句之后,但我从 PHP 收到错误消息,提示我没有向 ftp_pasv() 提供有效资源。如何确保 PHP 与 ftp 站点的连接是 PASV 而不是 ACTIVE 并且仍然使用 fwrite()?顺便说一下,我注意到 Windows 机器报告说我的 PHP 代码写入的文件在磁盘上有 4096 字节。它永远不会超过这个数量。这导致我将 output_buffering php 值更改为 65536 只是为了排除故障,但这也没有解决问题。 . .
** 更新部分 DUEX **
在 Rackspace 云站点产品上解决我的虚拟服务器上的问题被证明太困难了,因为它们没有提供足够的管理员权限。我在 Rackspace 的云服务器产品上创建了一个非常小的云服务器,并将所有配置配置到我仍然看到与 fwrite() 相同的错误的程度。为了确保我可以将文件从该服务器写入远程服务器,我在云服务器上的 bash shell 中使用了基本的 ftp 命令。它运作良好。因此,我假设 fwrite() 的 php 实现中存在错误,这可能是由于某种类型的数据限制问题造成的。当我从我的本地环境写入远程服务器时,与 Rackspace 云服务器上提供的相比,它的速度较慢,但它工作正常。有什么办法可以有效地降低写入速度?只是问问 :)
** 更新第三部分*
因此,我采纳了@a sad dude 的建议并实现了一个功能,该功能可能有助于尝试写入新文件并通过 ftp 将其完整发送的人:
function writeFileAndFTP($filename=null, $data=null, $node=null, $local_path=null, $remote_path=null)
{
// !Determin the path and the file to upload from the webserver
$file = $local_path.'/'.$filename;
// !Open a new file to write to on the local machine
if (!($file_handle = fopen($file, "wb", 0))) {
die("There was a problem opening ".$file." for writing!");
}
// !Write the file to local disk
if ($bytesWritten = fwrite($file_handle, $data) ) {
//echo "There were " . $bytesWritten . " bytes written to " . $file;
}
// !Close the file from writing
if (!fclose($file_handle)) {
die("There was a problem closing " . $file);
}
// !Create connection to remote FTP server
$ftp_cxn = ftp_connect($node['addr'], $node['ftp_port']) or die("Couldn't connect to the ftp server.");
// !Login to the remote server
ftp_login($ftp_cxn, $node['user'], getPwd($node['ID'])) or die("Couldn't login to the ftp server.");
// !Set PASV or ACTIVE FTP
ftp_pasv($ftp_cxn, true);
// !Upload the file
if (!ftp_put($ftp_cxn, $remote_path.'/'.$filename, $file, FTP_ASCII)) {
die("There was an issue ftp'ing the file to ".$node['addr'].$remote_path);
}
// !Close the ftp connection
ftp_close($ftp_cxn);
}
最佳答案
fwrite
可以一次写入的字符串的长度在某些平台上是有限制的(这就是它返回写入的字节数的原因)。您可以尝试在循环中运行它,但更好的办法是简单地使用 file_put_contents
,这样可以保证写入整个字符串。
关于php fwrite() 没有完成将字符串数据写入文件,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9473474/
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!