Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bashshellcgi获取整个文件路径或上载文件_Bash_Shell_File Upload - Fatal编程技术网

使用bashshellcgi获取整个文件路径或上载文件

使用bashshellcgi获取整个文件路径或上载文件,bash,shell,file-upload,Bash,Shell,File Upload,我想获取select file的文件路径,但根据浏览器本身的安全性,无法读取文件路径。 例如,firefox只读取文件名(ex test.txt)。 考虑到这一点,如何读取bash shell脚本中所选文件按钮的文件路径? 我需要文件路径的原因是我想将文件上载到服务器,因此我想使用命令cp来完成此操作,如: cp文件路径(和文件名)服务器路径 我可以用简单的按钮(type=button而不是type=file)来用特殊的方法(用type=text来做这个把戏)吗? 我尝试的原始代码是: #!/b

我想获取select file的文件路径,但根据浏览器本身的安全性,无法读取文件路径。
例如,firefox只读取文件名(ex test.txt)。
考虑到这一点,如何读取bash shell脚本中所选文件按钮的文件路径?
我需要文件路径的原因是我想将文件上载到服务器,因此我想使用命令cp来完成此操作,如:

cp文件路径(和文件名)服务器路径

我可以用简单的按钮(type=button而不是type=file)来用特殊的方法(用type=text来做这个把戏)吗?
我尝试的原始代码是:

#!/bin/sh

#=================================================
#   PATH defination
# ================================================



#=================================================
#   Main
# ================================================
echo "Content-type: text/html"
echo "Pragma: no-cache"
echo ""
echo "<HTML><HEAD>"
echo "<meta http-equiv=content-type content=text/html; charset=UTF-8>"
echo "<TITLE>$msg010</TITLE>"
. ${WWW_SCRIPTS_LIB_PATH}/style-init.sh
echo "</HEAD>"
echo "<BODY>"
ShowSubLogo "$msg010"

if [ "$CONTENT_LENGTH" != "" ]; then
    read data
    filesplit1=`echo $data | awk -F'&' '{print $1}'`

if [ "$filesplit1" != "fileis=" ]; then
    filename=`echo $filesplit1 | sed "s/%20/ /g" | cut -f 2 -d "="`
fi

fi

echo "<br> </br>"
echo "<br> </br>"
echo "$msg050"
echo "<br> </br>"
echo "<form name=Updfw_form method=post action=EippsUpdate.cgi>"
echo "$msg020"
echo "<input name='fileis' id='UpLoad' type='file'>"
echo "<br> </br>"
echo "<input name='update' value='$msg030' class=bton_over value=\"$com010\" type='submit' onmouseover=\"this.className='bton_out'\" onmouseout=\"this.className='bton_over'\">"
echo "<input name='cancel' value='$msg040' class=bton_over value=\"$com010\" type='reset' onmouseover=\"this.className='bton_out'\" onmouseout=\"this.className='bton_over'\">"
echo "</form>"
echo "</BODY></HTML>"
#/垃圾箱/垃圾箱
#=================================================
#路径定义
# ================================================
#=================================================
#主要
# ================================================
echo“内容类型:文本/html”
echo“Pragma:无缓存”
回声“”
回声“”
回声“”
回显“$msg010”
. ${WWW_SCRIPTS_LIB_PATH}/style-init.sh
回声“”
回声“”
ShowSubLogo“$msg010”
如果[“$CONTENT_LENGTH”!=”;然后
读取数据
filesplit1=`echo$data | awk-F'&'{print$1}'`
如果[“$filesplit1”!=”fileis=“”;然后
filename=`echo$filesplit1 | sed“s/%20//g”| cut-f2-d“=”`
fi
fi
回声“

” 回声“

” 回显“$msg050” 回声“

” 回声“” 回显“$msg020” 回声“” 回声“

” 回声“” 回声“” 回声“” 回声“”
它只是读取文件名,在crome浏览器中,它无法工作

或者是否有其他方法可以将文件上载到用户可以选择的服务器? 我搜索了bashshell版本的示例,但很少查看

只是整个文件路径!或上传文件到浏览器


谢谢你的回答。

不,没有。我告诉你是胡说八道。虽然我真的不知道如何滥用它,但我相当有信心它确实是一个安全问题

您必须添加另一个输入字段,用户将在其中填写文件应存储在服务器上的路径

老实说,对于由人工操作的web应用程序(而不是由特定客户端程序调用的web服务),我看不出客户端上的路径和服务器上的路径有任何共同之处。通过提供单独的输入字段,用户可以自由地将文件放置在本地计算机上任何需要的位置

如果它们实际上必须是相同的,那么可能存在一些常见的应用程序,您可以将执行上载的脚本(可能通过一些更合适的协议,如ssh,调用接收脚本或使用scp或sftp)与适当的路径捆绑在一起


另一方面,shell不太适合CGI编程,因为它使用特殊字符,因此很难正确保护。

我不确定是否正确理解:这是
客户端
还是
服务器
脚本?您正在用shell编写CGI(服务器端)吗?我不太确定.CGI文件是什么。。。但它可以处理客户端和服务器端。我认为这是服务器端。我发布的代码可以“echo$filename”在firefox和IE中显示文件名,但crome浏览器不能。。。(代码不是完全的,只是部分的)所以我想要另一个方法来获取文件名(和整个路径)。或者将文件上传到服务器的另一种方式(文件可以由用户选择)代码示例实际上是POSIX shell中的CGI脚本。CGI脚本在服务器端运行。为了使客户端上的文件路径与服务器相关,您正在尝试执行什么操作?在任何情况下,我可以想象路径实际上是匹配的,可能有一个更好的解决方案使用其他一些协议,如SSH或SFTP或FTP或诸如此类。谢谢!我将尝试使用输入字段!