我试图了解会话如何在PHP中工作,并发现会话数据默认存储在文件系统中.在共享托管环境中,会话数据可以由任何用户编写的PHP脚本读取.如何防止这种情况?
我有一些通过命名管道相互通信的进程.目前,我在本地创建所有管道,并将应用程序保存在同一个工作目录中.在某些时候,假设这些程序可以(并且将)从不同的目录运行.我需要创建我在已知位置使用的这些管道,因此所有不同的应用程序都能够找到所需的管道.
我是Linux新手,不熟悉文件系统结构.在Windows中,我使用像AppData文件夹这样的东西来保存这些管道.我不确定Linux中的等价物是什么.
该/tmp目录看起来可能很好地运行.我已经在一些地方看到它已经在系统关闭时被清除了(这很好,当我开始备份时,我可能不会重新创建管道.)但是我看到其他一些人说他们正在丢失文件当系统启动时,好像它是定期清理的,当我的应用程序使用这些管道时我不想发生这种情况!
是否有更适合特定应用商店的地方?或者/tmp是我想要保留这些的地方(因为它们毕竟是暂时的).
目标
我正在尝试将zip文件写入python aws lambda的/ tmp文件夹中,因此我可以在压缩之前提取操作,并将其放入s3存储桶中。
问题
Os Errno30只读文件系统
在我的计算机上对该代码进行了本地测试,以确保在将文件上传到AWS之前,该文件将写入我的工作目录。这是我要使用的代码。
file = downloadFile() #This is api call that returns binary zip object
newFile = open('/tmp/myZip.zip','wb')
newFile.write(file)
extractAll('/tmp/myZip.zip')
Run Code Online (Sandbox Code Playgroud)
这是尝试提取zip文件的代码
def extractAll(self,source):
with zipfile.ZipFile(source, 'r') as archive:
archive.extractall()
Run Code Online (Sandbox Code Playgroud)
这是痕迹
[Errno 30] Read-only file system: '/var/task/test-deploy': OSError
Traceback (most recent call last):
File "/var/task/web.py", line 31, in web
performAction(bb, eventBody)
File "/var/task/src/api/web.py", line 42, in performAction
zipHelper.extractAll('/tmp/myZip.zip')
File "/var/task/src/shared/utils/zipfilehelper.py", line 24, in extractAll
archive.extractall()
File "/var/lang/lib/python3.6/zipfile.py", line 1491, in extractall
self.extract(zipinfo, path, pwd)
File …Run Code Online (Sandbox Code Playgroud) 我需要临时写一个文件到文件系统,以便快速检查它,然后我想删除它.
根据我的谷歌搜索,看起来可以使用NodeJS的tmp包:https: //www.npmjs.com/package/tmp
但我对文档感到困惑.
这是他们如何使用它来创建临时文件的示例:
var tmp = require('tmp');
tmp.file(function _tempFileCreated(err, path, fd, cleanupCallback) {
if (err) throw err;
console.log("File: ", path);
console.log("Filedescriptor: ", fd);
// If we don't need the file anymore we could manually call the cleanupCallback
// But that is not necessary if we didn't pass the keep option because the library
// will clean after itself.
cleanupCallback();
});
Run Code Online (Sandbox Code Playgroud)
但是当我读到它时,它看起来像是将一个函数传递给tmp.file.我如何将缓冲区,路径或其他内容传递给它以使其执行其操作并创建临时文件?
我一定是想念一些傻瓜.
谢谢您的帮助!
-------------最终答案----------------------------------- --------------
我想发布我的最终答案,以防其他人在阅读示例代码时以某种方式遇到脑阻塞.我现在看到这个问题应该是显而易见的.谢谢你CViejo:
var fs = require('fs');
var Q = require('q');
var tmp …Run Code Online (Sandbox Code Playgroud) 情况是这个应用程序需要更多的空间/tmp.目前我的tmp文件夹位于root的分区中.tmp为了利用更大的空间,临时创建一个符号链接到另一个分区是否安全?
我今天必须编写一个Bash脚本来删除重复文件,使用它们的md5哈希值.我将这些哈希值存储为临时目录中的文件:
for i in * ; do
hash=$(md5sum /tmp/msg | cut -d " " -f1) ;
if [ -f /tmp/hashes/$hash ] ;
then
echo "Deleted $i" ;
mv $i /tmp/deleted ;
else
touch /tmp/hashes/$hash ;
fi ;
done
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但让我想知道:这是一种节省时间的方法吗?我最初想过将MD5哈希存储在一个文件中,但后来我想"不,因为检查给定的MD5是否在这个文件中需要每次都重新读取它".现在,我想知道:使用"在目录中创建文件"方法时它是一样的吗?当同一目录中有大量文件时,Bash [-f]是否检查线性或准常量复杂度?
如果它取决于文件系统,那么tmpfs的复杂性是多少?
我无法在任何地方找到我的问题的答案,所以我想我已经问过了.
我正在使用Alamofire 3.1.5上传相当大量的图片,我们正在谈论数百MB.
有一个代码片段:
self.manager.upload(.POST, url, headers: headers, multipartFormData: { multipartFormData in
multipartFormData.appendBodyPart(fileURL: generalURL, name: "general", fileName: "general", mimeType: "image/jpeg")
multipartFormData.appendBodyPart(fileURL: img1URL, name: "img1", fileName: "img1", mimeType: "image/jpeg")
multipartFormData.appendBodyPart(fileURL: img2URL, name: "img2", fileName: "img2", mimeType: "image/jpeg")
multipartFormData.appendBodyPart(fileURL: img3URL, name: "img3", fileName: "img3", mimeType: "image/jpeg")
}, encodingCompletion: { encodingResult in
.
.
.
Run Code Online (Sandbox Code Playgroud)
据我所知,Alamofire通过将它们保存到磁盘来处理创建这些请求,以实现更好的RAM优化.这很聪明,我真的很高兴.它只是完美无瑕.
另一方面,这意味着它基本上使磁盘上的数据有效负载翻倍.
事情是那些文件没有被删除,它甚至导致iOS默认屏幕警告设备在可用空间上运行不足.
我知道如何删除此目录的内容,但在我当前的代码流中,在完成所有请求后删除内容是安全的,甚至可能是100个请求,并且每个请求大约需要20MB的有效负载.所以问题是设备甚至可能没有存储这么多数据的能力.
我的问题是:
成功上传后,我可以让Alamofire删除这些文件中的每一个吗?
对不起,很长的问题,我会在这里给你发一个土豆,但这不是9gag.
我创建了一个将多个程序连接在一起的管道,不幸的是,这些程序在文件夹中创建了大量临时文件/tmp,并且在使用大型数据集时,我的管道因/tmp文件夹已满而崩溃。
如何导出临时文件,以便在运行管道的当前工作目录中而不是文件夹中创建它们/tmp?
目前,我尝试将TMPDIRenv 变量导出到当前工作目录中已创建的目录/work,但临时文件仍在该文件夹中创建/tmp:
export TMPDIR=$(mktemp -d --tmpdir=/work)
<script>
rm -rf $TMPDIR
Run Code Online (Sandbox Code Playgroud)
该程序无法为创建的临时文件设置不同的输出文件夹。
我正在使用R,via Rscript和H2O,但是H2O正在崩溃.我想查看日志,但是当R会话结束时(即当Rscript完成时),包含它们的R tempdir似乎被删除了.
是否可以告诉R/Rscript不要删除它使用的tmp文件夹?
我正在尝试执行以下代码(此处为tmp lib ):
const tmp = require('tmp')
tmp.dir(async (err, path, cleanupCallback) => {
console.log(path)
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
C:\Users\LONGUS~1\AppData\Local\Temp\tmp-13152HMljuIU3YKR0
Run Code Online (Sandbox Code Playgroud)
如何让它输出真实路径,像这样C:\Users\LONGUSERNAME\AppData\Local\Temp\tmp-13152HMljuIU3YKR0?