【PHP】くだらねぇ質問はここに書き込みやがれpart4
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
05/03/13 16:08:32ID:???ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
0002nobodyさん
05/03/13 16:13:46ID:???0003nobodyさん
05/03/13 16:28:43ID:D632M8O2urlencode/urldecode関数を使うだけじゃなくてもう一工夫必要ですかね?
文字化けしちゃうんですが。
環境はRedhatLinux、PHP4.3.10です。
0004nobodyさん
05/03/13 16:55:32ID:???マルチバイト周りの設定の不備のような気もしますが、
bin2hex()を使って比較してみれば正確に渡っているかどうか確認できますよ
0005nobodyさん
05/03/13 17:02:09ID:???0008nobodyさん
05/03/13 21:01:59ID:???php.iniのmbstring.http_inputとかですかね?
ちょっとやってみます。
ちなみにFORMタグのデータは日本語でもちゃんと受け取れるのですが、
phpでURLエンコードしたデータは文字化けしてしまいます。
0009nobodyさん
05/03/13 22:51:58ID:nnVcNb6z"abc" "def" "ghi"を含まなければtrueとしたいのですが、
if(!ereg("abc"$a)||!ereg("def",$a)||!ereg("ghi",$a)){
echo true;
}
↑このように書いたところすべてtrueになってしまいました。
なぜですか?一個ずつ三回ifを書けば期待どうりの結果になります
00109
05/03/13 23:05:50ID:???思いっきり勘違いしてました
0011nobodyさん
05/03/13 23:08:30ID:???$a="abc"をそいつに放り込んでみると、
ereg("abc",$a) -> true , ereg("def",$a) -> false , ereg("ghi",$a) -> false
したがって、if(false || true || true) -> if(true) になる。
$a="xyz"を入れると同様にして
if(true||true||true) -> if(true) になる。
何も不思議はあるまい。
0012nobodyさん
05/03/13 23:19:16ID:???0013nobodyさん
05/03/13 23:20:25ID:???わかりやすい説明ありがとうございます。
|| ←これは左右のどちらかがtrueならtrueですよね?
だから || をいくつ並べても一つでもtrueがあればtrueですよね?
0014nobodyさん
05/03/13 23:29:31ID:???論理演算でググれば絵付きで説明が見つかりますよ。
"abc" "def" "ghi"を含まない
= abcを含まない かつ defを含まない かつ ghiを含まない
= (! abcを含む) && (! defを含む) && (! ghiを含む)
= !(abcを含む || defを含む || ghiを含む) [ド・モルガン]
= !( ereg("(abc|def|ghi)",$a)) [正規表現のクラス化]
= !(abcを含む または defを含む または ghiを含む)
0015nobodyさん
05/03/13 23:31:43ID:???PHP+MySQLで、MySQLに書き込む際にSJISの文字化けを起こしてしまいます。
クエリは"INSERT INTO table(name) VALUES('$name')" 、$name=mysql_escape_string($_REQUEST['name']); です。
$_REQUEST['name']='表示'とすると侮オになってしまいます。
文字コードはSJIS、magic_quotes_gpcはoffで変更は出来ません。
addslashes()を加えても駄目でした。どうすれば良いのですか?
0016nobodyさん
05/03/13 23:34:23ID:???<? print date('Y.m.d H:i', filemtime("このファイル.php")); ?>
と使ってるのですが、わざわざファイル名を指定せず、自ファイルの最終更新日を得る
スマートな関数って、ないんでしょうか?
SSI で云うところの、<!--#echo var="LAST_MODIFIED"--> みたいな奴。
0018nobodyさん
05/03/13 23:46:31ID:???mb_language("ja");
mb_internal_encoding("SJIS");
mb_http_output("SJIS");
mb_http_input("auto");
0019nobodyさん
05/03/13 23:50:12ID:???そいう場合はココを書き直したら、うまくいきました!
とか書くと同じ悩みの人にもよろし。(今回はいないでしょうけど
皆様もよろしく。
0020nobodyさん
05/03/14 00:02:48ID:???<?php
print date("Y年n月j日 H時i分", filemtime($SCRIPT_FILENAME)) ;
?>
--------------------------------------------------------------
<?php echo "最終更新時刻:".date("F d Y H:i:s." , getlastmod()); ?>
0021nobodyさん
05/03/14 00:09:05ID:???手持ちのマニュアルではimap_fetch_bodyで取り出せるようなことが書いてあるのですが
具体例がなく、またwebで探してみましたがみつかりません。
どなたかお力を・・
002216
05/03/14 01:34:39ID:???ファイル名が色々変わりうるならそれでもいいですね。
>>20
そ、それです。php 公式サイトマニュアルの filemtime() から参照してた…灯台もと暗し。
>>17 のfilemtime($_SERVER['PHP_SELF']) よりもスマートなので getlastmod() でいきます。
002321
05/03/14 04:34:04ID:???0025nobodyさん
05/03/14 11:14:54ID:???>ツリーは検索できるんですが、同じパスワードで認証しようとすると行き詰まります。
パスワードの暗号方式が異なるのでは?
Active Directoryは確かKerberosを使っていたと思いますが。
0026nobodyさん
05/03/14 12:39:35ID:???0027nobodyさん
05/03/14 12:52:03ID:NwXBy3ub$title = "test";
$file_r = file('./template.php');
$file = implode('', $file_r);
$file = ereg_replace('{(\$[[:alnum:]]+)}', "\\1", $file);
print $file;
template.php
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h1>{$title}</h1>
</body>
</html>
test.phpを実行すると変数が置換されて({$title}をtestに)表示されるようにしたいのですが、"\\1"がおかしいのか
$titleのようにそのまま表示されてしまいます。どうしたらいいのでしょうか。
0028nobodyさん
05/03/14 13:15:04ID:???preg使う
$file = preg_replace('/{(\$[[:alnum:]]+)}/e', "$1", $file);
または
$title = "test";
include('./template.php');
002928
05/03/14 13:16:40ID:???<html>
<head>
<title><?=$title?></title>
</head>
<body>
<h1><?=$title?></h1>
</body>
</html>
0030nobodyさん
05/03/14 13:22:09ID:???ランダム数値を取得するのにmt_rand()やrand()を使うとして、
ダブらないようにするには、過去全ての数値を記録しておくより他は無い。
1. 数値を一個生成する度に過去の数値と比較して有効無効を判定。
初めての数値だったら、記録用配列に保存。重複していれば再生成。
2. 重複しない数値を入れた配列を用意し、shuffle()を使ってかき混ぜる。
最初から順番に使っていく。
0031nobodyさん
05/03/14 13:52:38ID:ac0vKofO着メロダウンロードしたんですけど、怪しいサイトの可能性はありますか?
0033nobodyさん
05/03/14 17:42:03ID:R34xlKHj切り取った物を別の変数に格納する関数はPHPに標準装備されてますか?
あれば名前を教えてください。
0034nobodyさん
05/03/14 17:48:16ID:???〃∩ ∧_∧
⊂⌒( ´・ω・`) くぜんぶマニュアルに書いてあんがな
`ヽ_っ⌒/⌒c
ttp://www.php.net/manual/ja/ref.strings.php
ttp://www.php.net/manual/ja/ref.mbstring.php
0036nobodyさん
05/03/14 18:00:01ID:9MS+lPogheader( "Content-type: application/octet-stream;n" );
header( "Content-Disposition: attachment; filename="". urlエンコードした日本語 .""n" );
print ファイルの中身
とやっても、ファイル名がばけばけくんです。
sjisでもeucでもダメなのですが…
0038nobodyさん
05/03/14 18:33:20ID:???>>30 とは違う意味ならこんな感じか。
$nums = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9) ;
shuffle($nums) ;
$numuniqs = 1000 * $nums[0] + 100 * $nums[1] + 10 * $nums[2] + $nums[3] ;
printf("%04d", $numuniqs) ;
0040nobodyさん
05/03/14 23:19:48ID:???function getPassnum($keta='4'){
if(!$keta) return False;
srand();
}
0041nobodyさん
05/03/14 23:21:18ID:???>>26
function getPassnum($keta='4'){
if(!$keta) return False;
srand();
$temp = shuffle(array(0,1,2,3,4,5,6,7,8,9));
return (string) $temp[0].$temp[1].$temp[2].$temp[3];
}
0042nobodyさん
05/03/15 11:47:18ID:???0043nobodyさん
05/03/15 13:21:19ID:a8e+tPDr実行中のphpをとめるにはどうしたらいいのでしょうか?
強引にでもプロセスとめたいです。
0044nobodyさん
05/03/15 13:23:30ID:a8e+tPDr0047nobodyさん
05/03/15 16:05:59ID:EikE9BP9最近OSを入れ替えたんですが(Fedora2→CentOS4)、
同じPHPスクリプトでメールを送れなくなってしまったもので。
<php.ini>
sendmail_path = /usr/sbin/sendmail -t -i -f自分のアドレス
※sendmailのパスはwhichで確認しましたので、間違いありません。
※メールサーバー(Postfix)はきちんと動いていて、メールの送受信が可能です。
<PHPスクリプト>
<?php
$email = "自分のアドレス";
$subject = "TEST";
$content = "This is test";
mb_send_mail($email, $subject, $content);
?>
※mbstring関係の設定も行っており、mb_ereg_replaceなど他のマルチバイト文字列関数は使えます。
※エラーメッセージの表示をオンにして確認してみたのですが、エラーは何も出ません。
何か根本的なことを見落としているのかも・・・
アドバイス願います。
0049nobodyさん
05/03/15 20:29:10ID:???配列を空で初期化するのは、
$a = array();
でよいんでしょうか。
なにか正しいやり方あれば教えてください。
005147
05/03/15 23:05:05ID:EikE9BP9レスどうもありがとうございます。なるほど、postfixのmain.cfを読むと、
sendmail_path = /usr/sbin/sendmail.postfix となっていますね。
で、この通りにphp.iniの方を書き換えて、apacheを再起動してみたのですが、
メールの送信はできませんでした。うーん・・・
0052nobodyさん
05/03/15 23:38:55ID:???postfix のログを見るとか、下みたいな感じのスクリプトを
sendmail_path の先に置いて、こいつの結果をそのままその sendmail.postifxって
言うやつに食わせてちゃんと送るか確認するとか。
#!/bin/bash
OUT=/tmp/php_maildump
echo $0 $* > $OUT
cat > $OUT
exit 0
0053nobodyさん
05/03/16 00:03:01ID:oQ3Q5gEXPHPのバージョンは4.3.10です。
if(getenv("HTTP_USER_AGENT")=="Pockey-GetHTML"){exit;} うーん?
005447
05/03/16 00:14:43ID:???レスどうもです。postfixのログには関連するものがなかったのですが、
apacheのログを再度見直してみたら、
sendmail.postfix: fatal: chdir /var/spool/postfix: Permission denied
というエラーを見つけました。これが原因でしょうか。
で、/var/spool/postfixのアクセス権を調べたところ、
所有者はrootで、アクセス権は755に設定されていました。
所有者以外のユーザーも読めるわけですが、何が問題なんでしょう。
試しに上記ディレクトリのアクセス権を777にしてみましたが、
結果は変わらず、エラーログも同じものでした。
あと、せっかくスクリプトを書いていただいたのに恐縮ですが、
後半のアドバイスは私にはちょっとわかりません。すみません。
0055nobodyさん
05/03/16 00:14:45ID:???Web制作板から来た人かいな。
UA名はきちんと申告するらしいのでhtaccessで弾くのが手っ取り早いんだが。
「うーん?」つーのはどういう意味で書いているんだ?
005653
05/03/16 00:49:42ID:???はい、移動してきました。
htaccessは使えないのでPHPでなんとかできないかと思ったんですが無理ですか?
うーん?というのは読み飛ばしてかまいません。深い意味はないです。
0057nobodyさん
05/03/16 01:28:17ID:???Pocky-GetHTMLのUser-Agent名は、「Pockey-GetHTML/4.12.0 (Win32; GUI; ix86)」
ってな感じらしいので、>>53の書き方の「 == (等しい)」だとそこを通らない。
strstrやstrposのような文字列の中を検索する関数を使う。
ttp://www.php.net/manual/ja/tutorial.useful.php
0058nobodyさん
05/03/16 07:58:31ID:qOWGuaAh<? echo '<?xml version="1.0" encoding="Shift_JIS"?>'; ?>
とやるのはどうでしょうか?
ご意見をいただけると嬉しいです。
0059nobodyさん
05/03/16 07:59:01ID:qOWGuaAh0061nobodyさん
05/03/16 10:11:58ID:???なんかググってみたけどモノ自体は判らなかったが
(今は配布されてないみたいだ)
相当に行儀が悪い振る舞いをするモノということだけは判った。
現物ないので、UAを偽装できてしまうのか判らんが。
>>57みたいに文字列検索で、正規表現で引っ掛けるか。
あとデフォルトのUA表示は「Pocky/〜」というのもあるみたい。
0062nobodyさん
05/03/16 12:26:14ID:???GETHTML 4.13は持ってるよ
UAを変更する機能はないのでPockey-GetHTMLを含むものを拒否するだけでOKでしょう
それかrobots.txtを読み込むのでrobots.txtでも拒否できますよ。
一応4.13からは
(1) 同一サーバ(ホスト)への同時取得数が 1 に固定されました
(2) 同一サーバ(ホスト)への連続取得に対し、1秒の wait をデフォルトで入れました
という変更がされてるようです
006353
05/03/16 13:14:18ID:???モノが無いので挙動を確かめられんのですが
多分これでいけるんでしょう。次回の爆撃を楽しみにまっときます。
if(strpos($_SERVER['HTTP_USER_AGENT'],'Pockey-GetHTML')==true){exit;}
0064nobodyさん
05/03/16 14:19:24ID:???まてまて、strposは先頭の文字の位置は0を返すぞ。
!==false じゃないかな。
UA偽装してアクセスするくらいのテストをした方が爆撃が楽しみになると思う。
0066nobodyさん
05/03/16 17:00:56ID:???Webで翻訳してみたら「変数だけは、参照によって超えられることができます」と・・・
変数自体は$a[1]=array()しか存在していないはずなのです
意味がわからない
print_r($a);
Array ( [1] => Array())
Fatal error: Only variables can be passed by reference
■ このスレッドは過去ログ倉庫に格納されています