쉘을 사용할 수 없는 렌탈 서버에서 심볼릭 링크 사용
설치
쉘을 사용하면 간단하지만, 쉘은 사용할 수 없는 전제로 한다.
1 mente 디렉토리를 만든다.
ftp 클라이언트 등으로 작성한다. 디렉토리 이름은, 뭐든 상관없지만, 만일 mente로 했다.
2 CGI 파일 ln, cgi를 만듭니다.
로컬 PC에서 파일을 작성하고 ftp 클라이언트 등에서 파일명 ln, cgi 업로드한다.
ln.cgi#!/usr/bin/perl
use utf8;
use CGI;
use File::Find;
use Cwd;
my $dir = Cwd::getcwd();
$dir=~ s/([^\/]+?)?$//; #実行デレクトリィより一つ上から全て走査する。
my $cgi = new CGI;
my $target = $cgi->param('target');
my $link = $cgi->param('link');
our $msg='';
# $msg=$dir;
if($target ne '' && $link ne ''){
$msg.="$target のシンボリックリンク($link)を生成します。";
if( (symlink $target,$link) == 0){
$msg.="失敗しました。";
}else{
$msg.="成功しました。";
}
}
our $fileTable="";
our @files=();
find sub {
my $file = $_;
my $path = $File::Find::name;
if ((-f $path) || (-l $path)){
push(@files,$path);
}
},$dir;
for(sort @files){
$fileTable.="<tr><td>$_</td></tr>";
}
print $cgi->header(
-type=>'text/html',
-expires=>'0',
-charset=>'utf-8'
);
my $script=<<'JOE';
$(function(){
$("#fileTable td").on("click",function(){
$("#target").val($(this).html());
})
});
JOE
print << "EOF";
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8" />
<!-- <link reil="stylesheet" href="style.css"> -->
<style>
ul{
list-style: none;
}
label{
display:block;
float:left;
width :7em;
}
table#fileTable tr:hover {
cursor : default;
background-color: #f9cccc;
}
</style>
<title>シンボリックリンクの設定</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
</head>
<body>
<main>
<h1>シンボリックリンクの設定</h1>
<div>$msg</div>
<form>
<ul>
<li><label for="target">ターゲット:</label><input name="target" size=100 id="target"></li>
<li><label for="link">リンク先:</label><input name="link" id="link" size=100 id="link"></li>
<li><input type="submit" value="実行"><input type="reset" value="削除"></li>
</ul>
</form>
<h2>ファイルリスト</h2>
<table id="fileTable">
$fileTable
</table>
</main>
<footer>
<hr>
© 2018 00index.com<br>
説明:
<a href="https://qiita.com/items/e99d1f3db7de280de36d">https://qiita.com/items/e99d1f3db7de280de36d</a>
</footer>
<script>
$script
</script>
</body>
</html>
EOF
3 ln.cgi의 액세스 제한을 설정합니다.
.htaccess 등으로, 이 CGI가 다른 사람에게 액세스 되지 않게 제한을 실시한다. 어려울 경우, ln.cgi를 매번 삭제한다. 이 스크립트는 보안을 고려하지 않으므로 무단으로 사용되지 않도록주의해야합니다.
4. ln.cgi에 실행 권한을 설정합니다.
ftp 클라이언트 등에서 권한을 설정합니다. 서버에 따라 다르지만 755 등.
쉘을 사용할 수 있다면
별로 사용하지 않는다고 생각하지만, 일단 기재해 둔다. 개조해 다른 용도로 하는 경우의 참고로 해 주었으면 한다. 액세스 제한은 생략되었습니다.
mkdir mente
curl -o mente/ln.cgi https://00index.com/basefile/ln.txt
chmod 755 mente/ln.cgi
사용법
CGI를 동작시키면 파일 리스트가 표시되므로, 마우스로 파일명을 클릭하면 타겟의 란에 파일명이 카피된다. 링크처 입력란에 심볼릭 링크시킬 패스와 파일명을 입력하고 실행 버튼을 누릅니다. 링크가 생성되면, 그 취지의 메시지가 표시된다. 링크를 지우면 ftp 클라이언트 등을 이용하여 삭제하면 된다. 삭제 버튼은, 입력란을 삭제하는 것만이므로 주의해 주었으면 한다.
# 실수와 더 좋은 방법 등을 지적하십시오.
Reference
이 문제에 관하여(쉘을 사용할 수 없는 렌탈 서버에서 심볼릭 링크 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rdonster/items/e99d1f3db7de280de36d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/usr/bin/perl
use utf8;
use CGI;
use File::Find;
use Cwd;
my $dir = Cwd::getcwd();
$dir=~ s/([^\/]+?)?$//; #実行デレクトリィより一つ上から全て走査する。
my $cgi = new CGI;
my $target = $cgi->param('target');
my $link = $cgi->param('link');
our $msg='';
# $msg=$dir;
if($target ne '' && $link ne ''){
$msg.="$target のシンボリックリンク($link)を生成します。";
if( (symlink $target,$link) == 0){
$msg.="失敗しました。";
}else{
$msg.="成功しました。";
}
}
our $fileTable="";
our @files=();
find sub {
my $file = $_;
my $path = $File::Find::name;
if ((-f $path) || (-l $path)){
push(@files,$path);
}
},$dir;
for(sort @files){
$fileTable.="<tr><td>$_</td></tr>";
}
print $cgi->header(
-type=>'text/html',
-expires=>'0',
-charset=>'utf-8'
);
my $script=<<'JOE';
$(function(){
$("#fileTable td").on("click",function(){
$("#target").val($(this).html());
})
});
JOE
print << "EOF";
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8" />
<!-- <link reil="stylesheet" href="style.css"> -->
<style>
ul{
list-style: none;
}
label{
display:block;
float:left;
width :7em;
}
table#fileTable tr:hover {
cursor : default;
background-color: #f9cccc;
}
</style>
<title>シンボリックリンクの設定</title>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"
integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
crossorigin="anonymous"></script>
</head>
<body>
<main>
<h1>シンボリックリンクの設定</h1>
<div>$msg</div>
<form>
<ul>
<li><label for="target">ターゲット:</label><input name="target" size=100 id="target"></li>
<li><label for="link">リンク先:</label><input name="link" id="link" size=100 id="link"></li>
<li><input type="submit" value="実行"><input type="reset" value="削除"></li>
</ul>
</form>
<h2>ファイルリスト</h2>
<table id="fileTable">
$fileTable
</table>
</main>
<footer>
<hr>
© 2018 00index.com<br>
説明:
<a href="https://qiita.com/items/e99d1f3db7de280de36d">https://qiita.com/items/e99d1f3db7de280de36d</a>
</footer>
<script>
$script
</script>
</body>
</html>
EOF
mkdir mente
curl -o mente/ln.cgi https://00index.com/basefile/ln.txt
chmod 755 mente/ln.cgi
CGI를 동작시키면 파일 리스트가 표시되므로, 마우스로 파일명을 클릭하면 타겟의 란에 파일명이 카피된다. 링크처 입력란에 심볼릭 링크시킬 패스와 파일명을 입력하고 실행 버튼을 누릅니다. 링크가 생성되면, 그 취지의 메시지가 표시된다. 링크를 지우면 ftp 클라이언트 등을 이용하여 삭제하면 된다. 삭제 버튼은, 입력란을 삭제하는 것만이므로 주의해 주었으면 한다.
# 실수와 더 좋은 방법 등을 지적하십시오.
Reference
이 문제에 관하여(쉘을 사용할 수 없는 렌탈 서버에서 심볼릭 링크 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rdonster/items/e99d1f3db7de280de36d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)