【PHP】下らねぇ質問はここに書き込みやがれ 23
■ このスレッドは過去ログ倉庫に格納されています
0001909
2006/06/23(金) 01:59:03ID:lPdqGX0Zここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
まず読め【PHP マニュアル】
http://www.php.net/manual/ja/
過去スレは>>2
0800nobodyさん
2006/07/04(火) 15:13:11ID:???やはり入力文字で弾くのが良いかも
0803796
2006/07/04(火) 15:58:59ID:BWAomZFI認証のようなことは、確かにしたくはありません。
もちろん、今まで何も手を打たなかったわけではなく、
NGワード(COOLとかNICEとか)を設定して、それがあればerror()で止めていたのですが、
このところ毎日20件以上も来るようになり、毎回投稿内容が異なるので、NGワードも無力化してしまいました。
>>802
IPは当然その度に異なるので弾けませんし、リファラも世紀のものを引き下げてくることが大半です。
0804nobodyさん
2006/07/04(火) 16:00:43ID:???例えば、JavaScriptでフォームの一部を出力するようにすれば大分はじけると思うけど?
画像認証はダルイからほんとおすすめできない。
0805801
2006/07/04(火) 16:52:19ID:???韓国系?や、日本語入ったのはだめだけどな。
0806nobodyさん
2006/07/04(火) 17:06:03ID:???ctype_alnumでやってたけど,そっちの方が簡単っぽいな。
0807nobodyさん
2006/07/04(火) 17:42:10ID:pNwfONldphpはhtmlベースにかいて、<?php ?>で囲みまくるのか、
<?php ?>の中でechoとかprint使いまくって、html出力するのか
どっちが書きやすいですか?
0809nobodyさん
2006/07/04(火) 17:48:13ID:???0810nobodyさん
2006/07/04(火) 17:54:43ID:???周りの人間10人にアンケートを取ったところ奇麗に5:5となりますた。
とでも答えれば満足?
どういう書き方が良いかなんて書き手の趣味にもスクリプトの内容にもよるんだから、
自分の主観で見やすいと思った書き方で好きに書けばいいじゃん。
0811nobodyさん
2006/07/04(火) 17:57:18ID:???0814nobodyさん
2006/07/04(火) 18:34:24ID:???バックアップの部分をどうやって書いたらいいかわかりません
お願いします
0818814=817
2006/07/04(火) 18:57:57ID:???お世話になります
0820nobodyさん
2006/07/04(火) 19:19:15ID:???*で全部拾ってフィールド名とテーブル定義拾って
INSERT文にするなりすればいいのよ。
とりあえずmysqlの標準関数全部見たよね???
0821nobodyさん
2006/07/04(火) 19:25:17ID:???MySQLスレ。
MySQLから提供されてるツールを利用するのを、俺も薦める。
MyISAMだけならデータベース"ファイル"をそのまま
コピーしておくだけというのも結構良いぞ。
0822nobodyさん
2006/07/04(火) 21:14:44ID:n70oEdEe0823nobodyさん
2006/07/04(火) 21:16:42ID:???0825nobodyさん
2006/07/04(火) 21:21:00ID:n70oEdEeはできます。
hoge.php内のfunction varがあるとして
form action="hoge.php var()"みたいにできないかなと思いまして。
0826nobodyさん
2006/07/04(火) 21:30:44ID:???タグの閉じ忘れをやろうとしているのですが
これ以外にスマートな方法はありますでしょうか?
また、<!--の閉じ忘れはどうすればよいでしょうか?
0829nobodyさん
2006/07/04(火) 23:40:50ID:9/r1waWbボタン1を押したら aaaa.txt
ボタン2を押したら bbbb.bmp
ボタン3を押したら aaaa.pdf
を印刷するような事をしたいんですが、どうするのが妥当でしょうか。
HTMLだけじゃ無理ですよね?PHPでこーいうのできますか?
0830nobodyさん
2006/07/04(火) 23:44:53ID:???現在か過去か未来かを判定するにはどうしたらいいのでしょうか。
0831nobodyさん
2006/07/04(火) 23:51:54ID:???サーバー、プリンタが手元にあるイントラネットなら印刷用のtmpファイルを作って、
system("lpr tmpファイル");等として、バッチ的に出すのが手かと。
0834nobodyさん
2006/07/05(水) 00:27:07ID:???$hoge = $ereg_replace("\t","_",$hoge) だと、「___hogehoge__hogehoge___」となってしまいます。
「_hogehoge_hogehoge_」にするにはどうすればいいのでしょうか?
0835nobodyさん
2006/07/05(水) 00:28:30ID:???$hoge = $ereg_replace("\t+","_",$hoge) でもだめです。
0836nobodyさん
2006/07/05(水) 00:28:59ID:???$hoge = preg_replace('/\t+/', '_', $hoge);
因みにスレ違いな。次からは正規表現スレで。
0838nobodyさん
2006/07/05(水) 00:43:49ID:???それ以前の問題で、その方法は全くお勧めできない。
HTMLタグを許可するなら予めhtmlspecialcharsをかけてから許可するタグ・属性だけを元に戻すのが最善。
管理者専用であってもCSRFの可能性があるから全タグの無条件許可は止めとけ。
0839834
2006/07/05(水) 00:45:51ID:???ありがとうございます。実際には \t が 10-20 個ほどついているテキストだったのですが、
数は減ったもののすべて置換はできませんでした。正規表現板に行ってきます。
0840nobodyさん
2006/07/05(水) 00:52:12ID:???という手法はどうだろう。
0841830
2006/07/05(水) 00:56:17ID:???最初YYYY/MM/DDの/を除いた後に比較しようと思ったのですが、
どうも煩雑になってしまったのでして。
ありがとうございます。
0842nobodyさん
2006/07/05(水) 00:58:28ID:???0844nobodyさん
2006/07/05(水) 01:13:02ID:???$contents = file_get_contents("http://www.yahoo.co.jp/");
print $contents;
てやると強制終了しちゃうんですが、なんか設定がおかしいんでしょうか?
4.3.9だと問題ないのに…
0845nobodyさん
2006/07/05(水) 01:20:37ID:???0846844
2006/07/05(水) 01:42:02ID:???一年ぶりにphpさわったんで全然事情を知りませんでした。
どうも失礼しました。
0847nobodyさん
2006/07/05(水) 02:50:45ID:???-- --------------------------------------------------------
--
-- テーブルの構造 `hoge_hoge`
--
という内容をsql.txt に書き込んで、
$sql = file_get_contents("sql.txt");
mysql_query($sql, $conn);
すると以下のエラーが出ます、
phpmyadminなんかでこのsql文打っても問題ないのに
何が原因でしょうか? mysql_escape_string($sql)とか色々やってみたけど
だめぽです。
数時間苦しんでます。へるぷみー
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ';
-- -----------------------------------------------------
0848nobodyさん
2006/07/05(水) 02:58:37ID:???SQL文の末尾に余計な空白か改行が入ってるんじゃないかな。
MySQLの古いバージョンだとエラーになるんだよね、それ。
0849nobodyさん
2006/07/05(水) 03:01:54ID:???MySQL 使いではないけど一般的な切り分け方
1. $sql の内容が本当に sql.txt になっているか表示させてみる
※sql.txt を読むディレクトリが意図通りになっているか
2. $sql に sql.txt と同じものを代入して query 発行してみる
※そもそも mysql_query が phpmyadmin と同じ SQL 文を受け付けるのか?
http://jp.php.net/manual/ja/function.mysql-query.php
を見るとセミコロンを含んじゃ駄目だってあるし、複数行も良いのか分からん
0850nobodyさん
2006/07/05(水) 03:03:31ID:???エラーメッセージに sql.txt の最初の数行が表示されてましたね。
じゃあ、2 だね。
0851nobodyさん
2006/07/05(水) 03:46:59ID:pohb5aTEPHP5.1.4
WindowsXPsp2
apache2.2
と言う構成で運用しています。
PHPの構文についての質問なのですが、
大ループのような言う構文はあるのでしょうか。
Perlでは下記の構文です。
ROOP: {
〜
〜
}
私は「大ループ」と記憶しているのですが正式な名前が分からず
PHPマニュアルからもgoogleからも見つけることが出来ませんでした。
お力添えして頂けませんでしょうか。
0852nobodyさん
2006/07/05(水) 03:48:14ID:???PHPから実行するときはuse hogeの部分は事前にmysql_select_db("hoge")じゃないの?
そんなんmysql_queryで発行できないんじゃないか?
0853nobodyさん
2006/07/05(水) 03:52:04ID:???制御構造での「ラベル」かな。PHP ではないと思うけど
ネスとしたループ構造を抜けるためとかに使いたいなら
break に引数を付ければ実現できますよ。
ちなみに、ループは LOOP ね。
0854nobodyさん
2006/07/05(水) 04:04:18ID:???Perlはとりあえず置いといて、それがどういう動きをする構文なのか示した方がいいよ。
ちなみにPerlのそれは構文じゃなくて、ラベル+ブロックの組み合わせだと思う。
多重のループブロックの1番上に戻ったり抜けたりしたい場合、PHPではbreak 3;みたいに
ネスト数を指定したbreakやcontinueを使うようになってる。
0855851
2006/07/05(水) 04:49:55ID:???>>853
ラベルと言うんですね、初めて知りました。LOOPのご指摘有り難うございます。
恥ずかシィ。
>>854
目的は2通りありまして、どちらも通常のループ制御用途ではないのです。
1:見易くする為(セパレータやインデックス的用途)
メールフォームの入力データ妥当性チェックを例にしますと、
ルーチン:送信者名妥当性チェック
ルーチン:メールアドレス妥当性チェック
ルーチン:本文妥当性チェック
etc
と書きます。
ここで幾らサブファンクションに細かくわけても、ものによっては
if else 等の構文が複数入って大きなルーチンになるとゴチャゴチャします。
このような場合に、ラベルを使って、ココからココまでは、何のブロックか
と言うことを明示的に解りやすく書きたいのです。
コメント文は各構文の補足説明として使いたいと思っています。
0856851
2006/07/05(水) 04:50:30ID:???2:指定箇所まで処理を飛ばす。
if 〜
if 〜
if 〜
ルーチンA
1番目のifで真なら2番目以降は飛ばして
ルーチンAの行以降を読み込む。
if () {
if () {
if () {
}
}
}
このようにしても実現できますが可読性を
損ねてしまいますのでラベルを使えば解決できると考えました。
0857nobodyさん
2006/07/05(水) 07:27:56ID:???こんな風に書けば多少は見やすくなるかな?
try
{
// 送信者名妥当性チェック
if ($you == $hage) {
throw new exception ($hage);
}
// メールアドレス妥当性チェック
if ($omae == $hage) {
throw new exception ($hage);
}
// 本文妥当性チェック
if ($anata == $hage) {
throw new exception ($hage);
}
/* ルーチンA */
}
catch
{
/* エラー時の処理 */
}
0859nobodyさん
2006/07/05(水) 10:43:15ID:????に文字化けしてしまうのですが、どうすれば回避できますか?
dumpファイルやmysql、phpmyadminの文字コードは全てUTF-8に統一しているのですが。
0860847
2006/07/05(水) 10:58:49ID:???おっしゃるとおりっぽいですね。
となると解決策は、mysql_queryを行数文発行する、などが
あると思いますが、さすがにこれは厳しいです
phpからある程度のsqlを実行させる場合によい方法はないでしょうか?
0861nobodyさん
2006/07/05(水) 11:01:25ID:???> となると解決策は、mysql_queryを行数文発行する、などが
> あると思いますが、さすがにこれは厳しいです
なんで?
> phpからある程度のsqlを実行させる場合によい方法はないでしょうか?
system
0862nobodyさん
2006/07/05(水) 11:56:24ID:???0864nobodyさん
2006/07/05(水) 12:34:57ID:???ループで回せばいいだけだろ
while($sql=fgets($fp)
{
mysql_query($sql, $conn);
}
0865nobodyさん
2006/07/05(水) 12:39:54ID:???CGIとして動くか、Apacheの拡張スクリプトとして動くかの違い
CGIが何かわからないなら
■参考
通信用語の基礎知識より"CGI" http://www.wdic.org/?word=CGI+%3AWDIC
・WWWで, WWWブラウザからの要求に対してサーバが別のプログラムを起動実行し, 結果をWWWブラウザに返す処理を行なうためのインターフェイス.
・イメージマップ, アクセスカウンタ, 訪問者登録, 掲示板(BBS)などを実現する際に利用されている.
・UNIXのshやその互換シェル, またはPerl, C, C++などが利用される.
■参考リンク
http://e-words.jp/w/CGI.html
http://www.tohoho-web.com/wwwcgi1.htm
http://www.tryhp.net/first.htm
http://www.web-terakoya.net/basic/a_1.html
http://homepage2.nifty.com/yoshi-m/makehp/cgi/lesson/cgi/1.htm
0866nobodyさん
2006/07/05(水) 12:42:39ID:???ApacheがPHPのスクリプトを実行するプロセスを起動して、その結果を受けって
処理する、というのと
Apache自身がPHPのスクリプトを読み込んで実行するという違い
0867nobodyさん
2006/07/05(水) 13:04:54ID:???session_start();
$name = $_SESSION['name']; // ここで用済み
if (isset($_COOKIE[session_name()])) { // マニュアルから拝借
setcookie(session_name(), '', time()-86400, '/');
}
session_unset();
session_destroy();
session_write_close(); // この後もいろいろ続くので
こんな感じでさっぱりできますでしょうか
0868nobodyさん
2006/07/05(水) 13:16:43ID:???0869860
2006/07/05(水) 14:02:44ID:???その場合、改行を意識的に指定したSQL文でないと厳しくないですか?
(1行毎に内容が完結するSQL文を準備しなければならない)
system関数以外でよい方法はないでしょうか?
0870nobodyさん
2006/07/05(水) 14:05:12ID:???0871867
2006/07/05(水) 14:29:29ID:???あとはこの辺参考にすればすっきりでしょうか?
ttp://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html#PHP_Session_end
0872nobodyさん
2006/07/05(水) 16:58:27ID:???各板の上位5件のスレッドのリンクを生成、出力
というPHPを作りたいんですが、どうすれば良いでしょうか?
PHP ファイル 取得 リンク生成 等思いつく範囲の単語を入れてグーグルで調べてみましたが
答えは見つかりません
0873867
2006/07/05(水) 17:13:30ID:???2chでいうsubbback.htmlから5行読んだら?
0875nobodyさん
2006/07/05(水) 17:17:50ID:???mysql_queryは1行しか実行できない。
http://jp.php.net/manual/ja/function.mysql-query.php
ここのUser Contributed Notes
Predrag Supurovic
01-Dec-2003 09:52 と
samm at os2 dot ru
19-May-2004 06:15
参照
0876nobodyさん
2006/07/05(水) 17:33:28ID:???#!D:\php\php.exe
<?php
echo("test");
?>
が成功して、そのあとファイルを書き換えたら
急に動かずダウンロードをするようになった。
仕方ないからもう一度↑の内容に戻したら以下ずっと
実行せずにDLをするようになった。
どうやったら実行するようになりますか?
0877nobodyさん
2006/07/05(水) 17:43:30ID:???0878nobodyさん
2006/07/05(水) 18:12:06ID:???無駄な行が多いな。以下で十分だぞ。
ちなみに>>868の情報はウソ。もしゴミが残るというなら、具体的に実例を見せてみろ。
session_start();
$_SESSION = array();
session_unset();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
0879nobodyさん
2006/07/05(水) 18:59:07ID:???subject.txt → 特定スレの抽出 → datを数時間おきに取得
というような2ちゃんのdatを自動的に取得してくれる
過去ログ倉庫をブラウザではなくWeb上でやりたいんですが
スクリプトはありますでしょうか?もしくはヒントを下さい
特定スレの抽出は以下のようなスクリプトで出来ました
datを数時間おきに取得という部分で悩んでおります
<?
$fp=@fopen("http://鯖/板/subject.txt","r") or die("error");
$lines = file("http://鯖/板/subject.txt");
for ($i=0; $i<count($lines); $i++) {
if(stristr($lines[$i],"特定スレのスレタイ")){
list ($dat, $subject) = explode (".dat<>", $lines[$i]);
print "<a href=\"http://鯖/test/read.cgi/板/$dat/l50\" target=\"_blank\">$subject</a><br>";
}}
fclose($fp);
?>
0881nobodyさん
2006/07/05(水) 19:31:17ID:???ダウンロードになるのはMIMEタイプが間違ってる可能性が高い。
php.iniの設定や置き場所は大丈夫?
ちゃんとしててそうなるなら
header('Content-Type: text/html; charset=Shift_JIS');
とか実行してみるとか
0884867
2006/07/05(水) 20:19:29ID:???ファイルが残るって意味だと思う。
>871参照
ところで
$_SESSION = array();
session_unset();
これは等価じゃないんですか?
0886nobodyさん
2006/07/05(水) 20:48:12ID:???0887nobodyさん
2006/07/05(水) 20:48:55ID:???http://鯖/板/dat/番号.dat
あとはfsockopenでHTTP通信して差分取得できればベスト
0888nobodyさん
2006/07/05(水) 20:53:03ID:???できません。どうしたら良いのでしょうか?。
class abc{
var $a;
function abc(){
$p =& $this->a;
return $p;
}
function main(){
$p = $this->abc();
$p[] = 1; ← こんな感じで$this->aに値を追加したい
}
}
0889nobodyさん
2006/07/05(水) 21:11:48ID:???というのが非常に意味不明。
$p がクラス abc であるならば、
$p->a = 1;
みたいな形になるのでは?
0890nobodyさん
2006/07/05(水) 21:13:19ID:???function main()に、
$thisがあるのも意味不明だ
0892nobodyさん
2006/07/05(水) 21:15:11ID:???つ http://jp.php.net/manual/ja/language.oop5.php#op5.intro
これを見て勉強しろ。
class User {
var $test;
var $test2;
}
$user1 = new User();
$user2 = new User();
$user1->test = "user1's test";
$user1->test2 = "user1's test2";
$user2->test = "user2's test";
$user2->test2 = "user2's test2";
0895869
2006/07/05(水) 21:30:03ID:???サンクス、それ使って実際のsql.txtの半分くらいは実行できました。
しかし、「{」が含まれる行でエラーが発生しました。
エスケープしてもエラーは変わらず、です。
あと一歩、どうかお助けを
0896888
2006/07/05(水) 21:31:04ID:???$a =& $b;
$a[] = 'a';
print_r($b);
というのをfunctionから返ってきたもので参照?したかったのですが無理なのですね
しかも、main()ってあったんですね・・・
http://php.s3.to/man/function.main.html
0897nobodyさん
2006/07/05(水) 21:35:02ID:???0899nobodyさん
2006/07/05(水) 22:11:44ID:???なんだかPHP4だと参照が崩れて、5だとうまくいくような・・・
※長くてすみません。
class E {
var $keyName;
var $value = "";
function E( $keyName ) {
$this->keyName = $keyName;
} }// ↑要素のクラス
class C {
var $array;
function C(){ $this->array = array(); }
function getE( $code ) {
return $this->array["$code"];
}
function setE( $e ) {
$this->array[$e->keyName] = $e;
} }// ↑要素を集めるクラス
$e = new E( "test" );
$c = new C();
$c->setE( $e ); // 要素を収集する
$e->value = "hello"; // オリジナル要素の値変更
$test = $c->getE( "test" );
if( $test->value == "hello" ) // 参照先の値を確認
// ここで参照しない場合がありました。
// 設定や何か環境でしょうか。アドバイスなどありましたら、お願いします。
■ このスレッドは過去ログ倉庫に格納されています