2013-02-05 4 views
0

저는 bash 스크립팅에 익숙하지 않습니다. 그러나 스패머가 포함 할 수있는 스크립트를 추적 할 수 있도록 다음 스크립트를 통해 PHP의 sendmail이 라우팅됩니다.

$ PWD 변수가 파일의 작업 디렉토리 만 보여주는 파일 이름을 표시하지 않습니다.

배쉬 스크립트 :/usr/지방/빈/sendmail2

#!/bin/sh 
# Logging sendmail wrapper 

SENDMAIL="/usr/sbin/sendmail -t -i" 
LOGFILE="/home/mail.log" 

DT=`date "+%Y-%m-%d %H:%M:%S"` 
DTFN=`date "+%Y%m%d-%H%M%S"` 
#TMPFP=`tempfile --prefix=lsm_` 
TMPFP=`mktemp` 

cat | tee "$TMPFP" | $SENDMAIL $* 
RETVAL=$? 

TO=`grep "To:" <"$TMPFP"` 
rm -f "$TMPFP" 

echo "$DT: $PWD sent $TO" >> $LOGFILE 

exit $RETVAL 

테스트 스크립트를 /home/mysite/test.php :

<?php 
$to = "[email protected]"; 
$subject = "Test mail"; 
$message = "Hello! This is a simple email message."; 
$from = "[email protected]"; 
$headers = "From:" . $from; 
mail($to,$subject,$message,$headers); 
echo "Mail Sent."; 
?> 

php.ini 파일 :

sendmail_path = "/usr/local/bin/sendmail2" 
+2

'$ PWD'는 _print 작업 디렉토리 _ – user000001

+0

입니다.'pwd' 명령은 "print working directory"를 나타내지 만,'$ PWD' 변수는 "현재 작업 디렉토리"입니다. – dogbane

답변

2

글쎄, ${PWD}은 "print working directory"의 약자이므로 (pwd은 그 명령 임), 따라서 wi 작업 디렉토리 만 제공합니다. 그건 의도적으로입니다.

또한 작업 디렉토리에 반드시 sendmail2 스크립트 또는 sendmail2을 호출하는 PHP 스크립트의 전체 경로와 함께 수행 할 작업이 없습니다.

+0

아 촬영,이 문제를 해결하기 위해 폴더에 수십 개의 PHP 스크립트가있는 것처럼 이메일을 로깅하지 않아도됩니다. – Joe

+0

php 스크립트가 sendmail2 스크립트를 호출하기 전에 제거 할 수있는 식별 매개 변수를 추가하는 것이 가능합니까? 메일을 보내다? 매개 변수가 첫 번째 매개 변수 인 경우 매개 변수에서 벗어나기 쉽습니다. 마지막 매개 변수이면 조금 더 어렵습니다. [http://stackoverflow.com/questions/1215538/bash-extract-parameters-before-last- 매개 변수 - 인] (http://stackoverflow.com/questions/1215538/bash-extract-parameters-before-last-parameter-in) – William

관련 문제