【PHP】下らねぇ質問はここに書き込みやがれpart10
180 :
nobodyさん :
2005/09/29(木) 18:48:39 ID:6Acw6xK3 質問です。 $val_tmp2 = 'ポストする文字列 項目1(タブ)項目2 111(タブ)222'; $val_tmp2 = urlencode($val_tmp2); $val_length = strlen( $val_tmp2 ); $val_tmp1 ='POST /recive.cgi HTTP/1.0 Content-Type: text/csv User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322) Host: hoge.hage.com content-length:' . $val_length'; $val_out = $val_tmp1 . "\n\n" . $val_tmp2; $val_sock = fsockopen( 'host_name', 80, $val_error_no, $val_error_msg, 120 ); if( $val_sock == false ){ print "bom1<BR>\n"; exit( 1 ); } $val_ret = fwrite( $val_sock, $val_out ); fclose( $val_sock ); としたのですが、どうしてもval_tmp2の値が受け側で取得できません(それ以外はOKでした) どのようにしたら取得できるでしょうか?
>>178-179 有り難うございます。
メモリの設定値をいじってもダメでした。
MLに質問してみます。
>>180 > $val_out = $val_tmp1 . "\n\n" . $val_tmp2;
ここの\n\nでHTTPヘッダが終了してるんじゃないの?
>>180 PHPで受け取るならname=value&name1=value1の形式で
Content-type: application/x-www-urlencoded
がないと$_POSTには入らない
で$_POSTになければ$HTTP_RAW_POST_DATAを見てみたらあるかも
Content-type: application/x-www-form-urlencoded だった
185 :
180 :2005/09/29(木) 19:58:12 ID:???
>>183 氏
ありがとうございます。
しかしダメでした…
調べたところ、STDINには入っているので、最悪そちらを使えばいいかなとも思っています。
しかし正常に動かないのは癪なので、もしわかる方がいたら教えてください。
>>185 reciev.cgiはPHPなのか
PHPならContent-typeがapplication/x-www-form-urlencodedかmultipart/formdata以外のときは$HTTP_RAW_POST_DATAにPOSTデータが入る。
application/x-www-form-urlencodedかmultipart/formdataのときはその仕様に合ったデータじゃないとダメ
Perlなら何も考えずSTDINから読み込めばいい
187 :
180 :2005/09/29(木) 21:10:24 ID:???
>>186 氏
失礼しました、中身はphpです。
で、cgiとして動かしたところ、HTTP_RAW_POST_DATAがどうしてもとれませんでした。
cgiでは無く、phpとして動かすとなんの問題も無く取れたのですが…。
もしかしたらサーバの設定とかそういう話なのかな、と思ったのですが、
ちょっと今のところわからないので、とりあえず保留にしました。
しかしどうにかデータの取得自体は出来たので、なんとかなりそうです。
ありがとうございました!
質問です。
sample.phpに
switch ($_GET['id']) {
case "1" : $sql="WHERE id=1";break;
case "2" : $sql="WHERE id=2";break;
case "3" : $sql="WHERE id=3";break;
default : $sql="";
と記述してあるとします。
この時、ブラウザから
http:// 〜/sample.php?id=2と入力すると、
idが2のデータが出力されますよね。
上記の例の様に3件程度ならcase文でも構わないのですが、
仮に300件とかある場合、case文で300行書くのは非効率の様に思えます。
ここのidの部分を動的に変更する事は出来るのでしょうか?
例えば
if($_GET['id']){ $sql="WHERE shop_id=$_GET['id']";}
みたいな感じで、受け取ったidをWHEREで使う様なやり方です。
ちなみにこのまま命令文は、エラーがあるらしく何も表示されませんでした・・・。
PHP Version 4.3.10、MySQL 4.0.20という環境です。
どうか宜しくお願いします。
>>188 $sql="WHERE shop_id={$_GET['id']}"
でも、とっても危険だよ。。
>>188 ?id= の後ろにセミコロン入れられると、悪い人の任意のSQLをさしこまれちゃうよ。
UPDATEとかDELETEとか。
こうしな
$sql = "WHERE shop_id=" . (int)(@ $_GET['id']);
まあゼロをどう扱うかは自分で調節して。
191 :
188 :2005/09/29(木) 23:02:17 ID:???
>>189 早速のお答え、どうもありがとうございます。
ちゃんとidが動的に切り替わり、表示される様になりました。
・・・ですが、「とっても危険」という言葉が非常に気になっています・・・。
何がどういう点で危険なのか教えて頂けないでしょうか?
また、危険にならない代替案ってあるんでしょうか?
質問ばかりでスイマセン・・・。
192 :
188 :2005/09/29(木) 23:04:02 ID:???
>>189 =190
書き込みが重なってしまった様で申し訳ありません。
アドバイス、どうもありがとうございました。
>>191 $_GETには任意の文字列を入れることが出来るから、「;」で区切って
次のSQL文を自由に入れられてしまう。そうなったら編集も削除も思いのまま。
だからSQL文に渡す場合は何かしらのフィルタリングを自分ですることになる。
(今回の場合は数字以外の文字列があったら消すとかエラーで弾くとか)
この辺は自分で勉強しないと身に付かない。勉強が嫌なら下手に触らない事。
お聞きします。 掲示板や、メールフォームですぐに送信させずに 入力画面→確認画面→送信完了画面という3ページの構成だったとします で、確認画面でやり直しをしたい時、ブラウザの戻るもしくはhistory.back関数で 戻ったときに、フォームに入力した内容を保持させるためにはどうすればいいんでしょうか?
>>194 ブラウザのキャッシュの問題だから確実な解決手段はない
>>195 さん
なるほど。
こちら側でキャッシュさせるようにすれば、少しは確実になるってことになるってことですかね。
session や、hiddenか何かでやるかと思ってました。
ありがとうございました(・∀・)
>>191 SQLインジェクション でググると色々出てくるので、質問よりそっち見たほうが早い
・・・確か価格.comの件ってこれだったよな?あの件以来価格.comに登録してあった
アドレスにspamが来るんだが・・・
>>196 どうしてもやりたいなら「前の画面に戻る」リンクを作り、そこで戻させるように
するしかない。それでもブラウザの戻るで戻られたら意味がないけど。
そういやFirefoxだとブラウザの戻るで戻っても残ってたな・・・
>>197 俺もspam来てる。
そりゃ、0day-attackとかなら許せるけど、SQLインジェクションとか・・もう馬鹿かと・・・。
きっと他にも大量に穴があったんだろうなぁ。
>>196 逆だと思うぞ。
確実にやりたいなら、クライアントの挙動に期待などせずに(つまりキャッシュなぞ”させない”)
サーバ側で言うとおりセッション何ぞで管理するこった。
>>191 とにかくGET POST COOKIEは入力値をチェックしてから使え
if (strstr($_GET['id'], ";")) { echo "氏ねバカアホ"; exit; }
elseif (!is_numeric($_GET['id'])) { echo "いたずらはいやずら"; exit; }
201 :
nobodyさん :2005/09/30(金) 08:33:55 ID:FAEPRLcc
何処に依託してたのか非常に気になる所ですな。
まぁ、安く仕上げようと適当な中小使ったんだろ。>>価格.com
>>188 お前とりあえずPHPの参考書をせめて2〜3冊は読んでみろよ。
基礎の基礎を知らずにやってても上達しない。
セキュリティ対策云々とかの前に、idに変数を代入するというような
プログラミングにおける超基本的な思考が出来てない。
この調子じゃ配列なんか絶望的だな。
205 :
名無したん(;´Д`)ハァハァ :2005/09/30(金) 13:37:42 ID:kjDGUNft
preg_nantoka() で使える正規表現 の \w は [a-zA-Z0-9_] と等価という認識で問題ありませんか?
copy関数は同時にアクセスあれば壊れる可能性は少なからずある?
あ、コピー先のファイルがってことです。
少なからずあるといえばあるが、可能性は限りなく少ない
210 :
188 :2005/09/30(金) 14:48:49 ID:???
>>193 >>197 >>200 >>203 大勢の方からのアドバイス、本当に感謝しております。
一度基本から、じっくりと勉強し直してみる事にします。
さっそく今日辺り、
「基礎PHP」か「はじめてのPHP言語プログラミング入門」でも
買ってこようかと思います。
親身なご指導、本当にありがとうございました。
>>207-209 どうでもいいけど、最近ネット上でもリアルでも「少なからず」と「少なくとも」の意味をごっちゃに使ってる香具師を少なからず見かけるな。
「少なからず」は少なくはないって意味なんだが。
まあ言葉の意味なんて時代と共にうつりかわっていくのかね。
スレ違いな話でスマソ
212 :
軟式PHP :2005/09/30(金) 15:54:03 ID:???
爺乙。
掲示板、チャット等をCSVファイルを使って作るのは、時代遅れなんですか?
214 :
nobodyさん :2005/09/30(金) 16:00:18 ID:0T6o3fdx
文字列の"false"をbooleanのfalseとして認識させるには、 自分でチェックするしかありませんか?
215 :
軟式PHP :2005/09/30(金) 16:02:04 ID:???
>>213 時代遅れってこともないけど、環境によっては仕方ないんじゃないのかな。
データベースが使える環境なら、絶対使ったほうが開発は楽。
シリアライズを使って作るのもありじゃないかなぁと思うけど
ログが多くなってきた場合のアンシリアライズの速度や、
過去ログ管理が面倒さが気になるけどやったことないので分からない。
>>210 PHPもだが、今回の場合はMySQLの話も関わってるのをお忘れなく。
>>211 >少なからずあるといえばあるが、可能性は限りなく少ない
これを211の言うように置き換えると、
少なくはないがあるといえばある
あれ、何処が問題なんだ?
やばい俺日本人じゃないのかも。
220 :
207 :2005/09/30(金) 17:41:36 ID:???
>>209 そうですか、了解しました。レスありがとうございました。
エラーがでます。どこが間違ってますか? <?php $date = "<li>aaaaaaaa</li><li>bbbbbbbb</li><li>cccccccc</li>"; if(eregi("/<li>.*?<\/li>/",$date,$ary)){ print "$ary[0]"; } ?>
>>162 ,164,166,172
ありがとうございます。
正規表現勉強してみようと思います。
>>215 ご丁寧にありがとうございます。
参考になりました。
>>223 ありがとうございます。エラーは解決できました。
でも、【<li>aaaaaaaa</li>】だけとりたいんです、
最短マッチができません。
>>225 正規表現が苦手ならsubstr辺りで処理すればいい。
正規表現を勉強したくてやっているのなら丸投げするな。
ランダムな文字列を生成するスクリプトを書いたのですが、もっと簡単な方法はないでしょうか? <?php $number = array ("1","2","3","4","5","6","7","8","9"); $alpha = array ("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o", "p","q","r","s","t","u","v","w","x","y","z"); shuffle ($number); shuffle ($alpha); echo ("<br />"); foreach ($number as $value_number){ echo ($value_number); } echo ("<br />"."<br />"); foreach ($alpha as $value_alpha){ echo ($value_alpha); } ?>
>>228 何がやりたいのかイマイチ分からんが・・・
<?php
echo '<br /'>',
str_shuffle('123456789'),
'<br /'>', '<br /'>',
str_shuffle('abcdefghijklmnopqrstuvwxyz');
?>
>>229 ありがとうございます。
str_shuffle関数は下記のようにまずシャッフルして、それから出力といった使い方はできないんですね(´・ω・`)
<?php
$alpha = "abcdefghijklmnopqrstuvwxyz";
str_shuffle($alpha);
echo ($alpha);
?>
filesize関数でキロbytes単位で表示できるものはないですか?
>>230 文字コードをランダムに作ってchrで出力すればええんちゃう?
>>229 海胆食いD、もといuniqidでは駄目なん貝?
>>231 取得した後に1024で割ればいいと思うのだが
>>234 ありがとうございます。
小数点以下を切り捨てる場合はどのようにすれば良いんでしょう?
$total += (filesize($afn)/1024);
こんな感じでやってるんですが
round関数か(int) てか検索しろよ
>>230 あ、
>>229 は余計な'があったな(試してないのバレバレ・・・)。
str_shuffle()のマニュアルを読めば判ると思うが「適当に入れ替えた文字列を返す」だから、
$alpha=str_shuffle($alpha);
で済むのではないかと。
>>219 >少なからずあるといえばあるが、可能性は限りなく少ない
少なくないが、限りなく少ない。
239 :
239 :2005/10/01(土) 04:07:40 ID:???
<?php $logfile = "./counter.log"; $cookiename = "mycookie"; $counter = 0; if( $fn = @fopen($logfile,'r')){ $counter = trim(fgets($fn)); fclose($fn); } if(!isset($_COOKIE[$cookiename])){ $counter++; setcookie( $cookiename,$counter); if($fn=@fopen($logfile,'w')){ fwrite($fn,$counter); fclose($fn); } } ?> <html> <body> <?php if($fn= @fopen($logfile,'r')){ $counter=trim(fgets($fn)); fclose($fn); } print($counter."人目です"); ?> </body> </html> を実行すると、
240 :
239 :2005/10/01(土) 04:10:56 ID:IQUyxXuW
Warning: Cannot modify header information - headers already sent by (output started at C:\04WebServer_182\04WebServer\DocumentRoot\p.php:1) in C:\04WebServer_182\04WebServer\DocumentRoot\p.php on line 11 46人目です ↑こんなんが出ます。 HTTPヘッダが送られた後にクッキーを送ろうとしてるので、こんなエラーが出るのだと解読しましたが、 当たっていますか? また、解決するにはどうすればいいでしょうか?
初期段階の質問なんですが、phpとapacheの連携がうまくいきません。 本にそってapacheはちゃんとインストールできて、「予想に反してー」ページが出ます。 phpもインストールでき、php.iniを/usr/local/libに置いています。 httpd.confにも AddDefaultCharset none と AddType application/x-httpd-php .php を追加しています。 しかしphpにブラウザでアクセスしてもダウンロードダイアログが出てしまいます。 apacheも再起動してます。何か他の問題は考えられますか? apache2.0.53 、 php5.0.4 FedoraCore4です。よろしくお願いします。
>>240 正解。クッキーはHTTPヘッダの中にSet-Cookie: mycookie=239の形で埋め込まれる。
1行目でヘッダ以外のものを出力したのでPHPの中の人はヘッダが終了したと思っている。(output started 〜 p.php:1 の部分)
うちでは問題なく動作したよ。「 <?php」てな感じにスペース1つを追加したら同じwarningを出せたけども。
> PHPの中の人 ワロス
2ch初心者ですか?
サーバーにアップして実行すると、Parse errorが出たので、 提示された行付近をチェックしたのですが、エラーの原因がサッパリわかりません。 ごく普通のswitch文なんですが、何がいけないのでしょうか? switch( mysql_num_rows($sql_result) ) { case 0: $id_result = ""; break; default: $id_result = ""; ←ここがダメと言われる } ちなみに、問題の行をコメントアウトしても同じ行数でエラーが出ました
全角スペースでも紛れ込んでるんじゃないの。 または括弧の対応とかさ。
中の人は性格が几帳面だからな。
>>246 Parse error: parse error, unexpected '}' in
てな感じで、何が不適切なのかもでてるでしょ?それも参考にしる
250 :
246 :2005/10/01(土) 13:04:54 ID:???
秀丸でスペースの表示してみましたが、全角スペースが紛れ込んだりはしてませんでした。 試しに、switchを丸ごとコメントアウトして実行するとエラーが出ませんでした。 一体全体何が・・・ eclipseでやってるので、括弧の対応不一致とかも無いです
251 :
246 :2005/10/01(土) 13:05:51 ID:???
>>249 それが出ればいいんですが、
Parse error: parse error in ファイル名 on line 63
しかでないんです・・・
>>246 PHPのアクセラレータかオプティマイザの所為かもしれない。
phpinfo()でインストールされてないか確認。
253 :
246 :2005/10/01(土) 13:25:13 ID:???
>>252 Zend Extensionとか、PHP Extensionとかのことでしょうか
>>246 > サーバーにアップして実行すると、Parse errorが出たので、
これってローカルで試した時はエラー無しでアップしたらエラー出たって意味か?
>>232 ,236,237
ありがとうございます。
目的のスクリプトが書けました。
256 :
246 :2005/10/01(土) 16:18:25 ID:???
>>254 いえ、書いてあるそのままの意味です
ローカルで実行する環境作ってないので
で、自己解決しました。
上に抜き出したソースは空文字列にしてますが、
実際にはcase 0 と default で、$id_resultにそれぞれ違う文字列を代入してたのですが
その文字列の内容を変えたら動くようになりました。
文字コードの問題なのでしょうか・・・
とりあえず、お騒がせしました。
正常に動作するコードなのに、原因を教えてくれって言ってたのかい┐(´ー`)┌
直すまでは正常に動作しないコードではあるんじゃ?
259 :
nobodyさん :2005/10/01(土) 17:04:31 ID:eDSneZeH
ApacheのDSOとIISのISAPIは似た技術と考えていいのでしょうか?教えてください。 また、WebサーバとしてApacheを用いた場合とIISを用いた場合ではPHPの挙動にどのような違いが出るのか教えていただけないでしょうか?
>>259 ApacheのSAPIとIISのISAPIは似たような技術だけど、
ApacheのDSOってのは全然ジャンルが違う。
そもそもそんな比較が出てくる時点で
「CGIとPHPは違うの?」並に理解不足と思われ。
261 :
259 :2005/10/01(土) 18:13:42 ID:???
>>260 すみません。こんな理解不足の僕がこの辺の知識を得るために読むべき本やサイトを紹介していただけたらありがたいのですが…。よろしくお願いいたします。
sechoって何ですか? リファレンスマニュアルにもないような・・・・
264 :
780 :2005/10/01(土) 21:08:23 ID:???
>>263 そのようでした^^;
ありがとうございます(その発想ができなくて悶絶してましたorz
↑よそスレのコテつけっぱでした ゴメソ 262でしたorz
ディレクトリの一覧を表示させたのですが、 ローカル環境とサーバー環境で並び方が違います。 ローカルではabcの順に並んでるのですが、鯖側では規則性が見つけられませんでした。 何が問題でしょうか。
自分でソートしないと駄目。 フォルダ操作は環境依存。
質問です。 $comment = preg_replace("/\n{2,}/", "\n\n", $comment);//2行以上の改行を2行に 上記のはわかるんですが、掲示板のコメントとか名前を改行禁止(改行しても一行表示)にしたいのですが… どなたか教えて下さい
>>268 君、応用力ないなぁ…
つ[$comment = preg_replace("/\n/", "", $comment);//改行を削除]
while ($i = fgetcsv($fp, 1000)) { 処理 } これは $i に値が存在する場合TUREを返し、ループ。 値が存在しない場合はFALSEを返すからループ停止。 という意味でOKですか?
まにゅあるよもうぜ fgetcsv()はファイルの終端に達した場合を含み、 エラー時にFALSEを返します。
>>271 (´・ω・`) すみません。ありがとうございます。
改定新版基礎PHPを一通り読み終わったのですが PHPについてこの後はどのようなことをして勉強をすれば良いのでしょうか?
>>273 一度自分で実際に作ってみて、
問題にぶつかってからいろいろ考えればいいじゃない。
勉強するだけじゃスキルは身に付かないよ
>>269 ありがとうございました。
出来ました。
つI
a.phpとb.phpで同じロックファイルをflockする場合 a.phpのプロセスでロック掛けている時はb.phpのプロセスでもロック掛かっていますでしょうか?
>>274 なるほど、ありがとうございます。
実際に何かを作る場合、リファレンスがあると便利なので買おうと思うのですが
逆引き代全とポケットリファレンスとではどちらの方が初心者向けでしょうか?
チャットとかで連続に投稿する場合にパソコンにはクッキーが効くからい良いとしても アイモード(携帯全部?)にはクッキーは効きませんよね? 携帯用としてクッキーに変わるようなものはありますでしょうか?
hiddenじゃだめなわけ?
>>277 初心者ならどっちも買っとけ。
どっちも役に立つ。
すみません、これ↓すごい気持ち悪いんですが、なぜだかわかりますか? マニュアルのどっかに書いてあったら教えてください。 (PHP5です) class Hoge { private $value; public function __construct($value) { $this->value = $value; } } $a = array(new Hoge(100), new Hoge(32), new Hoge(255), new Hoge(7)); sort($a); とやったらちゃんと$valueの順番にソートされてやがんの。 privateなのにアクセスされてる感がたまらなくキモイ。
(゚Д゚)ハァ?
>>279 >>280 レス有難うございます。
phpのチャットなんでここに書きましたがスレ違いの様な…
hiddenで構いませんので教えて下さい
もしくはヒントを!
必要な値を<input type="hidden"で出力ページに埋め込め
>>283 おまいが何をキモイといっているのかサッパリわからない。
クラスとかわかってる? 頭大丈夫か?
>>285 <FORM action="セルフ" method="post">
<?PHP
if($_POST['onamae']){
echo "$_POST['onamae'] ->";
echo "<INPUT type=\"hidden\" name=\"onamae\" value=\"$_POST['onamae']\">\n";
}else
echo "<INPUT type=\"text\" name=\"onamae\">\n";
?>
こんな感じかな?
なんで?
>>290 あなたが作った掲示板とかあったら教えてください。
過去の書き込みを全て200ptで表示してあげます。
文字列をサニタイジングしたとき、一部のタグだけ許可したいのですが、 いろいろ調べたのですがよくわかりません。 ヒントを下さい、お願いします。
>>293 予め決めておいた特殊な文字列 (特定界隈で特殊タグなどと呼ばれているもの)を
許可したい "一部のタグ" に変換するとか、一旦全ての文字列を HTML エンティティ
関数に通してから "一部のタグ" に置き換え直すとか、という風に出来ん?
>>282 アドバイスありがとうございます。
両方買ってみることにします。
297 :
nobodyさん :2005/10/02(日) 21:02:32 ID:KeoPF5ws
if (!(imagetypes() & IMG_JPG)) これって書き方間違っていませんよね? どうしても Fatal error: Call to undefined function: imagetypes() in ・・・・ と出てしまいます。
間違ってるからエラーになるんでしょ。メッセージは読んだの?
299 :
nobodyさん :2005/10/02(日) 21:11:28 ID:KeoPF5ws
あ、imagetypes()ってGD必要ですか?
undefined function
>>283 ソートするためには大小比較をしなければならないのだけど、
オブジェクトの大小比較って定義されてたっけか。
マニュアル15章の、比較演算子の項を見ると
オブジェクト同士の比較はできないことになってるから
偶発的なものと考えていいんじゃないかな。
本来ならエラーになってしかるべき手法だと思う。
そこには比較には配列形式でと書いてあるから、
たまたまそんな挙動になってるんじゃないかと推測。
302 :
283 :2005/10/03(月) 04:52:53 ID:???
レスありがとう。
>>287 何がキモイかわからないなら、
>>301 を読んでくれるとピンとくるかな?オブジェクトの比較って点がポイント。
クラスに関してひょっとしたら
>>287 さんほどわかってないかもしれないが、
>>283 に書いたコードのクラスくらいならわかりますよ。
頭は大丈夫。心配してくれてありがとう。
>>301 本当ですね。比較演算子のところでオブジェクトの比較にはまったく触れられていませんね。気になって試してみたら
$a = new Hoge(100);
$b = new Hoge(200);
とやると $a < $b は true になり、$a > $b は false になるようです。
勝手にプロパティで比較しているみたいですね。
クラスの中に複数のプロパティを定義してみると、ご丁寧にプロパティを定義した順に比較しているようです。
class Fuga extends Hoge {
private $value2; public $value3 = "";
public function __construct($value, $value2) { parent::__construct($value); $this->value2 = $value2; }
}
$c = new Fuga(10, 20); $c->value3 = "ABC";
$d = new Fuga(10, 20); $d->value3 = "ABZ";
とやると $c < $d が true になります。
Hoge::$value、Fuga::$value2、Fuga::$value3の順に正しく比較されていて、どうも偶発的ってよりも、意図的に比較してるような感じです。
プロパティが参照だったらどう比較するんだろう?
ずいぶん余計なお世話な挙動ですね。エラーだしてくれたほうがましなのに。
まあマニュアルにものってないようだから、変な比較はしないのが吉ってことかな。
>>302 こういうキモヲタが幼女誘拐とか起こすんだろうか。
>>303 おまいの発言に腹が立った
とりあえず以降の同等なレスはスルーするように気をつけることにする
そもそも何でオブジェクトをソートしようと思ったのだろう
307 :
nobodyさん :2005/10/03(月) 10:39:56 ID:UqfVmxKv
今からPHPを始めるところなのですが PHPはHTMLソースの中に書き込む形で書いてくらしいのですが これって右クリックのソース見るで、<? ?>の部分を見たらどのようにPHPで書いたのか丸見えということはないでしょうか。 まさかとは思うのですが。何かユーザからは見えないようになってたりしますよね。
>今からPHPを始めるところなのですが まずはPHPを始めてから聞いてください
>>307 PHPが正常に動いてさえいればPHPのソースは見えない。
見えるのは生成後のHTML。
>>307 PHPは鯖側で実行されるつーことをまず理解しましょう。
311 :
307 :2005/10/03(月) 11:23:23 ID:UqfVmxKv
皆さん、アドバイスありがとうございます。 見えないということで安心しました。丸見えってなんかやですもんね。 HTMLの中に一緒に書いたら見えるんじゃないのかと思ったのですが、やっぱり見えないようになってるんですね。 >PHPは鯖側で実行されるつーことをまず理解しましょう。 どこかに書いてありました。JavaScriptはユーザ側で実行されて、PHPはサーバ側で実行されると。 同じスクリプト言語でも仕組みが違うと。 なんか読んだことがあるのですが、この知識からPHPのソースは見えないの解を導き出すことはできませんでした。残念。 確かJavaScriptはソース丸見えでしたよね。 ということは、ユーザ側で実行するスクリプト=見える サーバ側で実行するスクリプト=見えない の図式がなりたちますね。 でもなんでサーバ側で実行すると見えなくなるんだろうか。 サーバ側で実行した結果をブラウザに返すからかな。 だからブラウザ側では帰ってきた結果しか見ることができない。ゆえにソース見えない。 と推理したのですが、あってるでしょうか。
>311 >サーバ側で実行した結果をブラウザに返すからかな。 そだね。
313 :
307 :2005/10/03(月) 11:31:48 ID:???
>>312 合ってましたか。どうもありがとうございます。
参照で返す時の&をつける場所についての質問なんですが、 function & bbb() { // 色々な処理 return $aaa; } function bbb() { // 色々な処理 return & $aaa; } function & bbb() { // 色々な処理 return & $aaa; } のなかでどう書くのが一番良いでしょうか? PHP4でクラスを返す場合は参照にしないと無駄なコピーができるということなのですが。
Cと異なり、PHPの場合、参照渡し・値渡しの違いは、値が変更された時に初めて起こる。 関数に渡した時点では、どちらもアドレスが渡されており、実行速度に差はなく、違ってくるのはその値が変更される時で、値渡しの場合に、関数内で変更された値が、関数内のローカル変数にコピーされるよう。つまり、値を変更しない関数ならば、値渡しと参照渡しの差はない。
>>314 参照で返すってどういうこと
引数に渡す変数には値渡しとか参照渡しとかあるけど
実際にやってみればわかるけどreturn & $aaa;でエラーがでる
317 :
314 :2005/10/03(月) 12:47:03 ID:???
>>315 >>316 すみません、とんだ勘違いなコード書いてました。
呼び出す方で
$aaa = & bbb();
とやるのと、
function & bbb() {
}
とやるのと、もしくは両方&をつける場合の違いについてでした・・・
あと、自分はCがわからないので、ちょっとイメージがつきにくいのですが、違いは全くないということなのでしょうか?
よく$x = new class()は$x = & new class()と書くほうがいいというのとはまた別の話ということなのでしょうか?
>>294 後者のやり方でやってみたのですが、属性が必要なタグ(font color=〜等)の場合は
どうすればよいのでしょうか?
>>318 正規表現。
後、後者だと誤爆が多くなる気がするけど・・・
321 :
294 :2005/10/03(月) 14:44:59 ID:???
>>318 俺としては、前者 + 正規表現 (最小限ならば str_replace だけでも) を推奨。
後者でやろうとすると、色々とボロが出てしまわないだろうか?以下の色々と
ボロが出てしまっている、小汚いソースの様に。
<?php
header("Content-Type:text/html; charset=".mb_detect_encoding("ほげ"));
$str = "<Font color=red>文字列</fonT> <font color=\"red>文字列</font> <font color=\"red\">文字列</font> <span style=\"font-size:500%;\">文字列</span>";
$bef = array("/<font(\s+color\s*=\s*(\"(#?[a-z0-9]*)?\"|(#?[a-z0-9]*)?))*>(.+)<\/font>/iU");
$aft = array("<font$1>$5</font>");
echo preg_replace($bef,$aft,str_replace(array("<",">","@"),array("<",">","?"),stripslashes($str)));
exit;
?>
322 :
294 :2005/10/03(月) 14:49:56 ID:???
修正。&記号は "半角" 扱いでよろ。 echo preg_replace($bef,$aft,str_replace(array("<",">","@"),array("&lt;","&gt;","&#64;"),stripslashes($str)));
323 :
314 :2005/10/03(月) 15:14:40 ID:???
>>320 なるほど。両方に&をつけなければいけないのですね。了解です。
関数の中でnewしてるんで、3箇所に&を書かないといけないんですね。
しかし、そうなるとやっかいです。
クライアントコードの側にも&をつけなければならないのはドキュメントで明示しておくしか方法はないということなのでしょうか?
324 :
nobodyさん :2005/10/03(月) 15:40:51 ID:yF4zapvk
今PHPを勉強しています。 プログラミングは初心者で、htmlがちょっとできる程度なので、基本的な疑問があります。 メールフォームなどを作っているのですが、いくつかのテキストボックスなどを作成するときに、 エラーチェックのプログラムなどは、なにも考えずにテキストボックスの項目の順番に記述すればいいのですか?
>>324 プログラミングの初心者を脱出してからやりましょう
>>323 その場合、呼び出し側で参照つけ忘れても大丈夫。
むしろ最初からその3つとも&をつけなくても無問題。
>>324 テキストボックスの順番自体に何か意味があるならそれなりに考える必要あるんだろうが、そうでないなら別に気にしなくてよし。
とりあえず状況詳しく書かないと、何でそんな疑問がわいたのかすら想像つかないんだけど。
>>325 ∧_∧
( ´∀`) <(オマ(ry
( )
| | |
(__)_)
328 :
nobodyさん :2005/10/03(月) 17:16:50 ID:7v8t3+9l
セッションについて質問です。 login.php にてログイン認証し、その際にニックネームをセッション登録しています。 認証後にトップページ index.php に戻り、トップページではサイドメニュー menu.phpを include にて読み込んでいます。 このサイドメニューでニックネームを表示させたいのですが、うまく取得してくれません。 index.php の方で呼び出すときちんと表示してくれるのですが。 原因が分かる方、教えてください。
>>328 index.phpの先頭にsession_start()が必要
>>329 違うだろ。menu.phpでsession_start()だろ。
includeしてんのに?
332 :
328 :2005/10/03(月) 20:44:44 ID:???
index と menu の両方で session_start() をしたところ、 index は呼び出せましたが、menu のほうだと呼び出せませんでした。 なんでだろう…。
333 :
328 :2005/10/03(月) 22:29:49 ID:???
しばらく格闘していますが未だに解決しません。 menu.php に直接アクセスすると表示されるのですが include(requireも試した)で読み込んだ時は表示されません。 原因が分かる人いませんかー?! orz
連続カキコすみません。解決しました。 include のパスをURLで指定していました。 絶対パスにしたところ、きちんと表示されるようになりました。 別のサイトと認識されてしまったのでしょうか…。 何にせよ、ご迷惑おかけしました。
普通URLで指定しねぇよ・・・
どっかで間違ってるだけじゃないの? 単純化するとこんな感じになると思うけど問題なく動くよ。 って、再読込したらそんなオチかよ。。。 テストスクリプトまで書いたので送信ポチっとな。 1.php - セッションの設定、 2.php - includeする、 3.php - includeされる 1.php session_start(); $_SESSION['name']='hoge'; <a href="2.php">link</a> 2.php include("3.php"); 3.php session_start(); // 2.phpでsession_start(); しても動作する echo $_SESSION['name'];
>>335 ですよね…汗
ローカルでテストするとき用にURLで指定していたのを忘れていたのです。
338 :
nobodyさん :2005/10/03(月) 22:51:58 ID:+uOrbyCW
手を尽くしたのですが分かりませんでしたので、すいませんが質問させてください! メモリが足りなくなってプログラムが途中で止まってしまいます。 unsetを使っても、$var = NULLとしても 全然メモリが解放されないんですがどのようにしたら良いでしょうか?
>>338 せめて、何をして足りなくなったのかを書いた方が良いと思うが。
>>338 php.iniでメモリの上限を増やす。
341 :
nobodyさん :2005/10/03(月) 23:38:39 ID:+uOrbyCW
すいません、かなり焦っています
PEARのMail.phpを使って、
SMTPでメールを送っている時にメモリがみるみる内になくなっていきます。
一万通くらい送ると250MBくらい減ります。
require( "Mail.php" );
$param["host"] = "127.0.0.1";
$mail = Mail::factory('smtp', $param);
for( $i = 0 ; $i <= 10000 ; $i++ ){
$mail->send("
[email protected] ", $head, $body);
}
このような感じになります。
送信の後にunset($mail);としてみたり、
$mail = NULL;としてもメモリが解放される様子はありません。
分かる人助けてください!
342 :
nobodyさん :2005/10/03(月) 23:41:34 ID:+uOrbyCW
>>340 なるほど。メモリ上限は設定していませんが
設定してやってみます。
プログラムではメモリ解放できないですかね。
SPAM業者の手伝いは、しない!
344 :
nobodyさん :2005/10/03(月) 23:49:26 ID:+uOrbyCW
スパムじゃないです! 登録してる人だけに送ってます
だな。1万通送るやつのスキルとも思えん。
よくさ、携帯で空メール送ると自動返信メールが送られてきて そこに専用URLが載ってたりするのありますよね。 あれの仕組みってPHPで出来るんですか?教えてくだされ。
347 :
軟式PHP :2005/10/04(火) 00:21:10 ID:???
メール送られてきたらキックすれば良いだけ。
>>346 [ヒント]
.forwardには起動(キック)するコマンドが記述できる。
PHPにはメモリ解放は無いんじゃなかったっけか
よくそんな技術でスパム送ろうと思ったもんだ(´_ゝ`)
351 :
346 :2005/10/04(火) 11:05:37 ID:???
forwardとキックについて調べました。 こんな便利な機能があることに驚きです。 しかし、xreaでは使えないようでした…。 残念ですが諦めます。
>>351 XREAはスパムのおかげでメールトラブル中
くれぐれも共有サーバでやらないでくれ
>>294 >>319 ありがとうございました。
あと、礼を言うのが遅くなりまして申し訳ありませんでした。
copyとrenameどちらが早い?誰か検証した人いないかしら?
>>352 最近、XREAで使ってるドメインのメアドで送受信したメールが
届かないことがあるな〜と思ったら、やっぱりトラブル発生してんの!?
でも公式サイトの障害情報見ても何も載ってないんだが・・・
356 :
nobodyさん :2005/10/04(火) 12:02:52 ID:JKocPbjB
>>354 copyはファイル全体をコピーする。
renameはディレクトリ構造とファイル名のみを書き換える。
検証するまでもない。
357 :
nobodyさん :2005/10/04(火) 12:32:57 ID:oyC3QmoS
358 :
nobodyさん :2005/10/04(火) 13:09:49 ID:ogSOlTW8
今、XP HomeでPHPで書いたコードの動作確認ができるように Apacheをインストールするところなんだけど インストールする際に出てくるウィザードに Network Domain, Server Name, Administrator's Email Address の3項目を入力する画面が出てきた。 Email Addressは適当なものを入れるとして Network Domain, とServer Nameは適当に決めちゃっていいもんなんでしょうか。 XP Homeのローカルで実験するんだから Network Domainは、C:\ でいいのかな。 それとも適当に、test.com とか書いちゃっていいんですかね。 Server Nameなんかは適当にPCがdynabookだからdynabookとか入れとこうかと思ってるのですが これでいいんでしょうか。
C:\がドメインだと思うか? ローカルなんだから適当なドメインを考えて入れればいい サーバーネームは自分のマシン名でも入れとけ どうせ、アクセスするときの指定はlocalhostか127.0.0.1でやるんだからよ
360 :
358 :2005/10/04(火) 13:30:08 ID:ogSOlTW8
>>359 >C:\がドメインだと思うか?
いや、思いません。思わないけど。ローカルのアドレスを入れとかないと、PHPのコードを実行するときに困るんじゃないかなと
ちょっと思っちゃった。
ドメインもサーバネームも適当でOKということなので安心しました。
アクセスはlocalhostか127.0.0.1で指定するからこの画面で設定しなくてもいいんですね。
どうもありがとうございます。助かりました。
localhostって入れりゃいいじゃん。
>>ALL m9(^Д^)プゲラッチョ!
364 :
nobodyさん :2005/10/04(火) 20:36:23 ID:F0xENNek
ま、相手もゴロツキ企業なわけだが
367 :
nobodyさん :2005/10/04(火) 22:42:10 ID:TMWi83Dv
¥(半角の¥)を出力するにはどうしたらいいですか? firefoxで見るとバックスラッシュになってしまいます。 $str = "123あいう¥¥"; echo ($str); こんな風に書いたりしてます。
369 :
nobodyさん :2005/10/04(火) 23:07:08 ID:TMWi83Dv
レスありがとうございます。そうなんですか。ちなみに $str = "¥¥1200"; echo ($str); は¥1200と出力されますが、 $str = "¥¥えんまーく"; echo ($str); は¥えんまーくと出力されます。 こういうもんなんですか?¥付の値段を出力したいときはどうすればいいのでしょうか?
HTMLの中だけでよいなら、数値文字参照や文字実体参照を使うのもありかと。 &#165; &yen; (&は半角)
>>367 文字コードを適正な指定にするか、
&yen;って書け。
373 :
369 :2005/10/05(水) 01:56:22 ID:oPPZGTrS
>>370 ,371,372
レスありがとうございます。
やりたいことは、Accessで出力したCSVファイルを分解してhtmlで出力したいだけなんです。CSV上で既に半角¥マークになってしまっているのでどうしたものかと。
IEでは問題ないのですが...。
>>372 文字コードをいろいろ試していたんですが、いまいちうまく行かないんですよねー。もうちょっと悩みます。ありがとうございました。
uid 名前 0 高橋 1 伊藤 2 鈴木 というテーブルがあるとします。 そしてuidをGETで取得し、名前を表示するプログラムを作るとします。 もしテーブルに無い番号が入力されたら、エラーメッセージを表示させます。 ここで質問ですが、 「GETしたuidがテーブルのuidに含まれていなかったら」という内容の文は どのように書くべきでしょうか? 自分で調べて、 if ($_GET['uid'] != $row_Recordset['uid']) { echo "不正なIDです"; exit; } というのを作ったのですが、 これだとテーブルに含まれるuidも全て"不正なIDです"となってしまいました。 どうしたら良いでしょうか・・・? ちなみにこの質問内容は、DB板じゃなくてココでOKですよね??
DB使ってるなら SELECT ------ WHERE uid = 「GETのuid」 で結果0件ならエラーじゃだめなん?
376 :
374 :2005/10/05(水) 02:30:01 ID:???
>>375 sqlのクエリ部分ではなく、phpの部分でやりたいのです・・・。
自分でも今色々と調べてる所ではあるんですが、
なかなかどうして難しいですね。
>>376 なんか凄まじい勘違いというか、無駄なことをやろうとしていないか?
>>373 Firefox(Winodws)で試したけど、x5cを円マークで表示すべき
EUC-JP、SHIFT_JISあたりはちゃんと円マークになってたぞ。
(\と&yen;で違うフォントになるのは知らなかったが)
マッピングが変なフォント使ってるんじゃないの?
379 :
374 :2005/10/05(水) 03:37:13 ID:???
>>377 えっ、マジっすか!?
無駄無駄ァ、な事だったとは・・・。
要は、「GETしたuidが、テーブルの中に実在するuidに含まれていなかったら」という
内容の文がうまく記述出来ればOKなのです。
無理というか、無駄な事なのでしょうか・・・。
とりえあず今宵は寝ます。
>>374 uidってやつがテーブル内にあるかどうかの判別って結局SQLで問い合わせてからじゃないと無理じゃん。
だったら、
>>375 にするのがベストだし、それが普通。
他に複雑な事情があるならそれも書かんとわからんよ。
>>379 >sqlのクエリ部分ではなく、phpの部分でやりたいのです・・・。
だから、SQLで該当するuidが何件あるかを読んで
phpで件数を確認すればいいやん
>なかなかどうして難しいですね。
379の頭の中のほうが難しい。
380氏のいうようにそれが普通というか定石ってもんだ
phpのマニュアルに結構ためになるサンプルあるで。
マジっすかとか驚くほどのことでもないだろうが・・・
383 :
nobodyさん :2005/10/05(水) 05:55:55 ID:SZgLc6+c
【PHP Version】5.0.4 >PHPマニュアル print_r より >print_r() と var_export() はvar_dump()と違い、 PHP 5においてオブジェクトのprotected及びprivateのプロパティも表示します。 と書いてあり、「var_dump()はpublicしか表示しないのだろう」と思って試してみた。 結果:var_dump で protected・private が出力されている。 <var_dump> object(obj)#1 (3) { ["a"]=> string(6) "public" ["b:protected"]=> string(9) "protected" ["c:private"]=> string(7) "private" } <print_r> obj Object ( [a] => public [b:protected] => protected [c:private] => private ) <var_export> class obj { public $a = 'public'; protected $b = 'protected'; private $c = 'private'; }
384 :
nobodyさん :2005/10/05(水) 05:56:30 ID:SZgLc6+c
質問: ・var_dump()はpublicしか表示しないのだろうと思ったけど、私の勘違い? ・各関数の違いは以下の通り? print_r : 簡素に出力。第二引数がTRUEの場合、結果を返す。 var_dump : 型などの詳細も出力。 var_export : PHPコードの形で出力。第二引数がTRUEの場合、結果を返す。
>>384 var_dump(英語)には
In PHP 5 only public, private and protected properties of objects will be returned in the output.
と書いてあるから
386 :
369 :2005/10/05(水) 10:22:41 ID:Qlmr5ADv
>>378 わざわざすみません。もっと勉強します。
ちなみにfirefox(mac os X)です。
osXとMAMPという環境でphpを勉強中です。
387 :
nobodyさん :2005/10/05(水) 10:44:16 ID:hgIawq/C
<?php $fruits = array("lemon", "orange", "banana", "apple"); sort($fruits); reset($fruits); while (list($key, $val) = each($fruits)) { echo "fruits[" . $key . "] = " . $val . "\n"; } ?> 上はsortを用いて配列をアルファベット順に並べたものですが、 配列をランダムに並ばせるものを作る簡単な方法はありますか? つまり、やりたい事はアクセスするたびに4つの画像の順番がランダムに入れ替わり表示されるようにしたいのです。
つ array_rand
つ shuffle
コンピュータに完全にランダムの数字を作らせるのは難しいみたいね。
391 :
nobodyさん :2005/10/05(水) 11:35:44 ID:rxjtKeLJ
ストップタグって何ですか?
392 :
nobodyさん :2005/10/05(水) 11:45:40 ID:hgIawq/C
>>390 擬似乱数で不都合なシチュエーションって何よ?
394 :
nobodyさん :2005/10/05(水) 12:35:29 ID:iJ3zhQF9
<?php for($i = 0; $i < count(@$_POST["check1"]); $i++) { echo "<p>".$_POST["check1"][$i]."にチェックが入っています"; } ?> <form method = "POST" action = "<?=$_SERVER["PHP_SELF"]?>" <table> <tr> <td> <input type = "checkbox" name = "check1[]" value = "PHP">PHP <input type = "checkbox" name = "check1[]" value = "Perl">Perl <input type = "checkbox" name = "check1[]" value = "ASP">ASP <input type = "checkbox" name = "check1[]" value = "JSP">JSP </td> </tr> <tr> <td> <input type = "submit" value = "送信" name = "sub1"> </td> </tr> </table> ちょっと確認したいのですが。 この場合、チェック入れたものだけが配列に入って送られるで合ってるでしょうか。 仮にPHP,JSPにチェック入れたとしたら、配列番号0には"PHP"が、配列番号1には"JSP"といった 具合に入れられて送られるといったイメージで合ってますか。 何か勘違いしていたら指摘していただけるとうれしいです。
>>394 合ってる。
次からは、まずprint_r($_POST)とかしてみてから書き込もうな。
397 :
394 :2005/10/05(水) 12:47:08 ID:iJ3zhQF9
>>395 回答ありがとうございます。
PHP初めてなもので、このイメージで合ってるのか不安だったので質問しました。
配列表示するんだったらprint_r関数使ったほうがコードが短くなってすっきりですね。
どうもアドバイスありがとうございます。
>>396 PHPもforeach使えるんですね。覚えときます。どうもありがとうございます。
398 :
nobodyさん :2005/10/05(水) 13:18:45 ID:KahEav2g
jpgraph + PHP4 を使用しています。 グラフで、左Yのスケールと右Yのスケールが違う複合グラフは作成出来るのでしょうか? 例えば、左Yのメモリは最大値100で棒線グラフ。 右Yのメモリは最大値10000で折れ線グラフといった感じです。
>>397 >配列表示するんだったらprint_r関数使ったほうがコードが短くなってすっきりですね
そういう意味ではなく、print_r($_POST) してみればワザワザ聞かなくても判るでしょ?
という意味だろ。
phpスクリプトの不具合に対する丸投げに近い質問(というか要望)を投げたいのですが、 ダメでしょうか?
内容によるんじゃない? 取り敢えず書く。 叩かれるのを恐るべからず。
別にいいのでは? ボロカスに言われるかもしれないけど、それなりに相手してくれると思うよ。 矢継ぎ早に同じレベルの質問を繰り返すと嫌われるかもしれないけれど。 ボロカスに言われても、指摘内容は正しいことが多いから、ムカつかずに今後に生かせばいい。
404 :
394 :2005/10/05(水) 14:05:38 ID:???
>>399 そうか。
print_r($_POST)すれば配列の中身が見れるから、それをしていたら質問するまでもなかったよねという意味でしたか。
配列だったら、こう書いたほうが便利だよといった意味かと思いました。
まだ基礎的なコードいじって学習してる段階なのでechoばっかり使ってました。
最初の方にちらっとprint_r関数も出てきてたなあ程度だったのでそこまで考えが回らなかったようです。
まあ、もやもやしたイメージが確かなものになったので感謝です。ありがとう。
>>402 <?
#データファイル
$data_file = "dataedit.csv";
#取り出す列-1(「$row = array("0", "1", "2")」とすれば1列目と2列目と3列目を取り出します。)
$row = array("0","3");
$num = count($row);
$data = file($data_file);
for($j = 0; $j < $num; $j++)
{
$result = $data[array_rand($data)];
$val = explode("\t", $result);
echo $val[$row[$j]] . "<br>";
}
?>
>>402 試してないけど
<?
$data = ---- の行以降を以下に変更
$tmp = file($data_file);
$rand_keys = array_rand($input, 10);
foreach($rand_keys as $i) {
$rec = explode("\t", $tmp[$i]);
foreach($row as $j => $k) {
echo $rec[$k] . "<br>";
}
}
407 :
406 :2005/10/05(水) 15:16:15 ID:???
あ、かぶった 1行訂正 foreach($rand_keys as $a => $i) {
408 :
405 :2005/10/05(水) 15:18:29 ID:???
>>405 ではfile_get_contentsをfileに直したけど
$tmp = explode("\t\n", $data);
を
$tmp = explode("\n", $data);
にすれば不具合はなくなるのではないかと思う
つか、fgetcsv($fp,1024,"\t",'')とかでやったほうが効率的だと思う
410 :
nobodyさん :2005/10/05(水) 15:37:15 ID:Cp2lANiy
サーバ:Linux PHPバージョン:4.3.8 APACHE:1.3.28 DBサーバ:Windows2000Server・SQLServer2000 LinuxのPHPからDBサーバにアクセスを行い、データを取得したいのですが 方法が分かりません。 マニュアルには、プラットフォームが違う場合はコンパイル時に 「Sybase拡張モジュール」を使用して下さいとあるのですが、 Sybaseをインストールしなければならないのでしょうか。
411 :
383 :2005/10/05(水) 16:02:58 ID:???
>>385 疑問が解けたよ Thx!
(英語版のマニュアルも見るべきだな orz )
412 :
nobodyさん :2005/10/05(水) 16:04:46 ID:Wy1EjQwZ
Smartyの質問なんですがよろしいでしょうか? {$user.id} みたいな変数(連想配列)は普通に展開されて表示できますが、 {include file="header.tpl" user_id="$user.id"} のような感じでやると、header.tplには$userが渡されているようです。 $user.idを渡したい場合はどうすればいいのでしょうか?
413 :
nobodyさん :2005/10/05(水) 16:48:26 ID:iJ3zhQF9
今現在php.iniの設定が post_max_size = 8M upload_max_filesize = 2M なのですが、この値って post_max_size = 1G upload_max_filesize = 2G のように適当にG買いとも大丈夫なんでしょうか。 書き込める容量とかにも制限があるんですかね。 1G,2Gくらいなら余裕で書いちゃってもOKでしょうか。
414 :
402 :2005/10/05(水) 16:50:56 ID:???
メモリの使い方によるんじゃね?レン鯖でやられたらたまんねぇな。
416 :
413 :2005/10/05(水) 16:56:15 ID:iJ3zhQF9
今、いろいろ調べてたら
post_max_size > upload_max_filesizeじゃないと、upload_max_filesizeが全く意味をなさないみたいなことを書いてました。
もし、2Gまでアップロード可能にしたければ
post_max_size = 2G
upload_max_filesize = 2G
って書くべきなんですね。
でも、ここに書ける容量の限界ってどのくらいなんでしょうか。
>>415 メモリの使いかたによっては書けると。
物には限度というものがあるとは思うのですが。書こうと思えばいくらでも設定可能なんでしょうかね。
417 :
413 :2005/10/05(水) 16:59:20 ID:iJ3zhQF9
メモリの使い方を考えないといけないんですね。 よくよく見てみたら memory_limit > post_max_size > upload_max_filesize じゃないとだめみたいですね。 こういうことしようと思えば、自サーバで、回線も高品質でメモリいっぱい積んどかないときついのかな。
これスレ全然くだらなくないな..
本来の質問スレのスレタイに質問という字がないのでこちらに人が集まる
421 :
418 :2005/10/05(水) 18:49:26 ID:???
正確な表記はunixODBCだな。
助けてください。 PHPで作ったライブラリ(クラス群)を第3者に提供する必要がでてきたのですが、 そのままですとソース丸見えになってしまいます。 そこで中身を見れなくするために、 コンパイルしてオブジェクトの形で提供したいのですが、 そんなこと可能なのでしょうか? APCはちと違うような気がするし、Encoderもありましたが有償ですし。 もし不可能ってことになるとC言語でライブラリ作成する必要がでてきて死にそうなんです。 どなたかお知恵を・・・
423 :
422 :2005/10/05(水) 19:58:44 ID:???
環境を書き忘れました。 FedoraCore4 Apache2 PHP5 です。
425 :
軟式PHP :2005/10/05(水) 20:08:13 ID:???
>>422 PHP SCREWってのはどうよ。使ったことないけど。
>>422 >>425 の手もあるけど、正直お勧めしない。
金とるんならNDAでも結んでおくか、Cで書くしかない。
429 :
422 :2005/10/05(水) 21:02:41 ID:???
>>427 そのプロダクトいいですね。
上に聞いてみます。
今後PHP案件がどんどん増えればいいんですけどね。
まだ正式な契約はしてないので、
Cでゴリゴリやるとなると工数再見積になると思います。
あ〜、めんどくせ。
>>418 様
サーバ環境が間違ってました。
サーバ:FreeBSD4-stable
FreeBSDでFreetdsとunixODBCを使用し、
DBにアクセスは出来たのですが、select分で取得した
値の日本語が文字化けします。
サーバがLinuxで、教えて頂いたURLの
「必要なLinux用ライブラリのフリーな実装」を利用すれば、
日本語の文字化けもなく、問題なく利用できるのでしょうか・・・。
devil();
ファイルに bbb ccc ddd とある場合に先頭にaaaを追加して aaa bbb ccc ddd としたいのですがbbb〜dddを読み込まずに実現する方法を教えて頂きたいです。 ファイルの先頭に挿入書込がしたいということです。 よろしくお願い致します
>>432 無いよ。
PHPの関数や命令文つーのは最終的にOSが提供している機能を使うんだけど
OS側の機能にそういう物が存在しない。
434 :
nobodyさん :2005/10/06(木) 03:31:59 ID:taikAwmT
PHPを使ってhtmlページを解析し、特定部分を抽出したいと考えています。 しかしいまいちアルゴリズムが思い浮かばないのでアドバイスをお願いしたいです。 はじまりから終わりまでを特定の文字列(正規表現の一致)で指定して はじめ部分指定〜おわり部分指定 という感じでこれら指定部分に挟まれた部分を抽出したいと思っています。 よろしくお願いいたします。
>>434 それでいいから、思うように書いてみ?
だめだったらまたこればいいさ。
ホントにくだらないですが、どうして データ管理をマイシークェルとかいうデータベースを使うのですか?
437 :
434 :2005/10/06(木) 06:40:55 ID:taikAwmT
わかりました質問を変えます。 正規表現で一致したある部分を先頭とし、もうひとつ同様にある部分を終わりとする、そしてそれらで指定した箇所を抽出する、そういったことが可能な関数または手法 あるいは 正規表現で一致したある部分から前方を削除し、もうひとつ同様にある部分から後方を削除する、そういった関数または手法 はありませんか?よろしくお願いいたします。
>>437 まったくしょうがねえなぁ
<?php
$text = "ほげほげはじめ部分指定ほげほげほげぬ\nほげほげほげる\nほげほげほげぽおわり部分指定ほげほげ";
$start = "はじめ部分指定";
$end = "おわり部分指定";
preg_match("/$start(.*?)$end/s", $text, $matches);
$result1 = $matches[0]; // 開始部分・終了部分も含む
$result2 = $matches[1]; // 開始部分・終了部分は除外
?>
440 :
434 :2005/10/06(木) 08:02:00 ID:???
>>432 読み込みなんぞfile_get_contentsで一気にできるだろ
MPEGなどの動画から任意のフレームの静止画像をJPEGなどの形式で取り出し保存する方法を教えてくれた人は神。
443 :
432 :2005/10/06(木) 09:04:36 ID:???
>>433 >>438 >>441 レスありがとうございます。
無理ですか。
bbb〜dddが500KBくらいあるので、読み込まずに済ませられるならいいなと思ったんですが。
素直に読み込むか、これを機にDBの勉強をしてみようと思います。
ありがとうございました。
>>444 まあそう言わずにPHPでお願いします。
446 :
nobodyさん :2005/10/06(木) 10:49:15 ID:NRrV93R6
>>442 ひとまず、MPEGの仕様を読むんだな。話はそれからだ。
447 :
nobodyさん :2005/10/06(木) 10:57:49 ID:RhL8bp3P
>>442 動画の再生やコマドリにはコーデックを用いるのが通常。
コーデックはライブラリとして提供される。
頑張れ。
あとコマンドラインからコマを抜き出すツールがあればそれを呼び出すってのも手
448 :
nobodyさん :2005/10/06(木) 11:51:33 ID:obhW270H
<?php $a = $_FILES["files"]["tmp_name"]; $fp = fopen($a,"r"); while($nakami = @fgetcsv($fp,1000)) { $ID = $nakami[0]; 〜中略〜 $ID48 = $nakami[47]; echo $ID; 〜中略〜 echo $ID48; } fclose ($fp); ?> CSVをアップロードして、出力される48個の文字列に mb_convert_kana処理(半角カナを全角にしたり)をしたいです。どうすればいいんでしょうか?
>>448 $ID = $nakami[0];
これは無駄というか有害な処理
配列のままの方が扱いやすい
答え
配列のままでarray_map()使う
>>448 while($nakami = @fgetcsv($fp,1000))
{
foreach($nakami as $value)
{
echo mb_convert_kana("K", $value);
}
}
fclose($fp);
451 :
448 :2005/10/06(木) 12:17:39 ID:obhW270H
>>449 ,450
早速のレスありがとうございます!
今から実験してみます。もしうまく行かなかったらまた相談させてください。
よろしくお願いします。
452 :
448 :2005/10/06(木) 12:59:37 ID:obhW270H
>450 450さんのコードでCSVの中身を出力することができました。これすごいです。(自分のは120行くらいあったので...) ただ、配列の中の特定の値だけをテキストエリアに出力したかったりするのですが、このwhileでforeachな感じでもそういうことってできますかね? >449 449さんの仰る通り、リファレンスを読んでいたら、array_map()が使えそうな気がしたんですが、どうもうまく扱えませんでした。 CSVをアップしてmb_convert_kanaで成形して、出来れば各項バラバラに出力したいだけなのですが...。
>>452 array_mapを使うとこんな感じかな。今回の場合だと
>>450 氏の方法と大して変わらんと思うが。
function kanaconv($value) {
return mb_convert_kana($value, "K");
}
while($nakami = @fgetcsv($fp,1000))
{
$nakami = array_map("kanaconv", $nakami);
foreach($conv as $value)
{
echo $value;
}
}
元々のやりたいことが特定の列だけを変換、出力したいのならこれで充分なはずだけど。
while($nakami = @fgetcsv($fp,1000))
{
$value = mb_convert_kana($nakami[列番号], "K");
echo "<TEXTAREA>$value</TEXTAREA>";
}
454 :
453 :2005/10/06(木) 13:30:27 ID:???
>>452 ごめん間違えた。
foreach($conv as $value)
↓
foreach($nakami as $value)
特定の列を抜き出したい場合はこういうのもありかと。 $arr_key = array(1,3,5,7,9); // 取り出したい列の番号 0起算 $arr_data = array(1,2,3,4,5,6,7,8,9,10); foreach($arr_key as $key){ echo $arr_data[$key]; //2,4,6,8,10が出力 }
456 :
448 :2005/10/06(木) 14:28:31 ID:obhW270H
>>453 ,455
すばらしいです!すごい..,。
>453さん
while($nakami = @fgetcsv($fp,1000))
{
$value = mb_convert_kana($nakami[列番号], "K");
echo "<TEXTAREA>$value</TEXTAREA>";
}
これ感動です。すごい手っ取り早い。
実際取り出したい値は1個ではないのですが、その場合は
455さんのパターンでいけばいいですかね。
本当に感謝します。ありがとうございました。
Webブラウザ上で実行できる「テキストの文字列変換、演算処理」といった作業ができるスクリプトが欲しいのですが、 質問ではなく作成依頼といったほうが良いかもしれません。 話聞いてくれます?
458 :
nobodyさん :2005/10/06(木) 14:39:36 ID:/yy7ybJN
今、PHPの本のサンプルコードを打ち込んで学習しているところなのですが フォームにデータを打ち込んで、登録済みかチェックするボタンを押すと、指定のデータが存在するのか調べて 結果を返すといった内容のコードなのですが 一応、コードは丸写しして、test.phpという名前で保存してですね。 後は、MySQLにデータを入れれば準備OKなのかなというところなのですが、どのようにしてMySQLにデータを入れればいいのか その初期の段階でつまずいていて困ってるんです。 参考書によると MySQLのデータベース「testdb」のテーブル「t_userid」の項目「id」に問い合わせするようで。 テーブル「t_userid」を作成するSQLは、「登録チェック用テーブル作成SQL」(t_userid.sql)にあります。 とあるので、さっそくt_userid.sqlを付属CD-ROMからコピーしてデスクトップに持ってきて とりあえず、test.phpと同じ場所に入れればいいのかな。と思いやってみたのですが Parse error: parse error, unexpected T_VARIABLE in c:\program files\apache group\apache\htdocs\test.php on line 12 こんなエラーが出て。失敗と。 結局、t_userid.sqlの中身を参考にして、自分でMySQLにデータを入力してね。ということなのでしょうか。 一体どのようにt_userid.sqlを料理したらいいのという段階でわからなくて困っているのでどなたか方向でも教えていただけると助かるのですが。 ちなみにt_userid.sqlの中身はこんな感じです。下のスレ番号に書きます。
459 :
t_userid.sqlの中身です :2005/10/06(木) 14:40:37 ID:/yy7ybJN
/*テーブル作成*/ CREATE TABLE t_userid ( )
>>457 「Webブラウザ"上"で実行できる」なら
JavaアプレットかJavaScript、Jscript、VBScriptの話になると思う。
461 :
t_userid.sqlの中身です :2005/10/06(木) 14:43:34 ID:/yy7ybJN
すみません。記述途中で書き込むボタンを押してしまいました。 ↓が、ないようです。 /*テーブル作成*/ CREATE TABLE t_userid ( id varchar{10} NOT NULL, PRIMARY KEY (id) ); /*データ追加*/ INSERT INTO t_userid(id) VALUES('aaa1111111'); INSERT INTO t_userid(id) VALUES('bbb2222222'); INSERT INTO t_userid(id) VALUES('ccc3333333');
462 :
nobodyさん :2005/10/06(木) 14:44:09 ID:kpXXJeyk
>>458 とりあえず、PHPよりもMySQLについて勉強した方がよいかと思うのですが…。
>>458 >結局、t_userid.sqlの中身を参考にして、自分でMySQLにデータを入力してね。ということなのでしょうか
はい。
何かの本を参考にしているようですし、その本のどこかに解説もあると思いますよ。
465 :
458 :2005/10/06(木) 14:53:28 ID:/yy7ybJN
>>462-464 アドバイスありがとうございます。
なんか良く見たらデータベースの章を見てください。とあるので、そこ読んだらできるかもしれません。
shell> mysql database < script.sql
こういったコマンドを打ってデータベースを作成するってことなんですかね。これがSQL文とかいうやつですかね。
なんか、データベースの章をちらっとみた感じでは。
コマンド打つ以外にも、phpMyAdminとかいう便利なツールもあるようで
それを使えば簡単に作成できるのかな。
ちょっとやってみます。
>>458 mysql弄るならnavicatいいよ
468 :
458 :2005/10/06(木) 15:43:44 ID:/yy7ybJN
>>466 PHPの参考書をスムーズに終わらせたいところですが
MySQLと連動して使うなんてあたりまえに使う機能だから避けて通れませんもんね。
しょうがないので、MySQLの勉強します。今データベースの章読んでるところです。
>>467 MySQLをいじれるツールっていろいろあるんですね。
とにかく、基礎知識仕入れてからいろいろ試してみようと思います。
>>467 良いけど、$160は一般ホビーユーザには躊躇する値段。
>>458 とりあえずMySQLにデータを作成しないとサンプルの実行はできないだろうから、
皆にレスをもらったことを参考に進めればいいんだろけど、最初のカキコの
エラーメッセージは多分MySQLとは関係ないと思われ。
>Parse error: parse error, unexpected T_VARIABLE in c:\program files\apache group\apache\htdocs\test.php on line 12
だから、12行目がPHPの文法としておかしいはず。入力ミスと思うからじっくりと見直してみそ。
ひょっとして本のサンプルが間違っている可能性もあるかもしれんが。。。
>>469 評価版で1ヶ月も使えばかなり動かし方解るから
それだけでも良いと思うけど
473 :
458 :2005/10/06(木) 16:40:38 ID:/yy7ybJN
>>470 よく見直してみたら、PHPスクリプトの末に書く ; を入れ忘れてたことが判明しました。。
直してみましたが、また
Parse error: parse error, unexpected '/' in c:\program files\apache group\apache\htdocs\test.php on line 51
このようなエラーが、また、タイプミスっぽいのですが、ぱっと見た感じ、どこが悪いのかわからなかったので
後で直すか、どうしてもわからなかったらCD-ROMにサンプルコードが入ってるので
それをそのまま移すことによって解決しようかと思います。
データベースの章をさーっと読みましたが、どこにもMySQLにデータを作成する方法という肝心な知りたいことがかかれてませんでした。
しょうがないのでphpMyAdminを解説しているページを読んだら、このツールを使った作成方法が書いてあるので
これを読めばやっとMySQLにデータを作成することができると思われます。
phpMyAdminのフォルダをtest.phpが置かれているところと同じフォルダに入れて
今、config.inc.phpの設定のところに来てるのですが
config.inc.phpをメモ帳で開いてみたところ、おそらく改行部分と思われるところが↑になっており
改行のない一続きの文になっていて、なにがなにやらさっぱりわかりません。
これは文字コードの関係でしょうか。
↑を\nに置換しようかと思ったのですが、↑は↑とは違うようで、置換のフォームのところにコピペしようと思ったのですができませんでした。
どなたかこれを解決するにはどのようにすればいいと思われますでしょうか。
何か特別なことができるアプリで開いたほうがいいのか、文字コード変換するアプリで処理すればいいのか。果たして設定ファイルの
文字コードなんか勝手に変えちゃっていいものなのか。わからず困ってます。
474 :
nobodyさん :2005/10/06(木) 16:52:53 ID:85el6NxV
51行目付近の/
476 :
nobodyさん :2005/10/06(木) 17:09:17 ID:/yy7ybJN
皆さんアドバイスありがとうございます。大変助かってます。
>>474 51行数えてみてみたんですが、/になんの間違いもないように見えるんですよね。
51付近といえば
echo "<tr>";
echo "<td><input type = \"text\" name = \"id\"></td>;
echo "</tr>";
echo "<tr>";
echo "<td><input type = \"submit\" value = \"登録済みか調べる\" name = \"sub1\"></td>";
echo "</tr>";
こんな感じですが、どこが間違ってるのかさっぱりわかりませんでした。/もちゃんとつけるべきところについてるし。
まあ、どうしてもわからない場合は、CD-ROMから丸ごとコピーして動かしてみます。
それでも動かなかったら、本が間違ってるということで。
>>475 さっそくphpeditorダウンして使ってみました。
単純にファイルを開くから、config.inc.phpを開けばいいのかと思ったのですが、phpプロジェクトファイルではありません。
と言われてひらくことすらできず。
まあ、とりあえず、phpeditorのヘルプファイル読んでみます。
それでもできなければUTF-8,EUC-JP対応のエディタ探して開いてみます。
echo "<td><input type = \"text\" name = \"id\"></td>; echo "<td><input type = \"text\" name = \"id\"></td>";
>>476 2行目の末尾の " が漏れてるのが原因だね。
紹介されてた phpeditor など構文チェックしてくれるエディタを使用すると、
この類のエラーはすぐ判る。
他にも構文チェックしてくれるエディタはあるんで、色々と触ってみて
自分が使いやすいと思ったものをチョイスすればいい。
あせらずにゆっくりと。。。
>>476 そっちじゃなくてスタンドアロン版にしておけ
”の閉じ忘れなんかも色分けしてくれるのでミスが減るはず
480 :
458 :2005/10/06(木) 18:18:44 ID:/yy7ybJN
>>477-479 アドバイスありがとうございます。
間違いはないんだけどなあと思ってたのですが、やっぱりタイプミスだったんですね。
よく見たら、片方はちゃんと"ついてるから、よーく見比べたら発見できそうでしたね。
ただ、こんなミスもすぐに発見できるようなエディタ探したほうが効率いいに決まってるので、吟味して選ぼうと思います。
C#とか普通のアプリ作ってても、ミスをすぐ指摘してくれる統合開発環境とかあるのとないのじゃ生産性にえらい差がでますもんね。
phpeditorってそれだけじゃなくてスタンドアロン版とかあるんですね。
そっちダウンしてやってみます。
481 :
458 :2005/10/06(木) 18:29:50 ID:/yy7ybJN
>>479 スタンドアロン版ダウンしまして、さっそく、config.inc.phpを開いたところ、無事改行されて表示されました。
スタンドアロン版は、単純にメモ帳みたいに開くことができるんですね。
これでphpのコードも書いて試用してみます。
どうもありがとうございました。
さっそく、設定変更します。
>>480 HTMLタグは属性の指定に "" を使用するのに、
スクリプト内で文字列を囲むのにも "" を使ってるのが、ミスの一つの要因だと思われ
\n入れたり、変数をパースさせたいんじゃなければ、
こういう時は ' ' を使うのが吉
文字列無いの " をエスケープする手間も省けて一石二鳥だよ
483 :
458 :2005/10/06(木) 21:16:00 ID:/yy7ybJN
>>482 さっそく\"部分を'に変えました。
いちいち\入れるの面倒だなと思ってたので助かります。
これでケアレスミスも防げそうです。
どうもありがとう。
>>483 逆だ!
\"を'に変えるんじゃない!
文字列リテラルの括りを'にするんだ!
485 :
458 :2005/10/06(木) 21:58:25 ID:/yy7ybJN
>>483 ということは、つまり
echo "<td><input type = \"text\" name = \"id\"></td>"; を
echo '<td><input type = "text" name = "id"></td>';
このように書けるってことですね。これでも\"とか書かなくて済むから助かりますね。
どうもたびたびありがとうございます。
>>438 サンキューっす。だからデータ管理に便利なわけねφ(..)メモメモ
マイシークェル勉強して2ちゃんねる型掲示板つくろっと。
もうあったような希ガス
マイシークェル で、いいのな・・・みんな
なんかビジュアル刑のバンドみたいな名前だな
マイシークェルって新たなDBの名前かと思ってたら mysqlの事なのかw
米の国の人はマイシィクェルと呼ぶこともあるそうだ
492 :
軟式PHP :2005/10/07(金) 01:17:26 ID:???
おまいら発音よすぎ。
The official way to pronounce “MySQL” is “My Ess Que Ell” (not “my sequel”), but we don't mind if you pronounce it as “my sequel” or in some other localized way. まあ、俺も気にしないよ。
SQLは, もともとSEQUEL(Structured English QUEly Language)と書きシークェルと 発音されていた. そのためSQLと書くようになった現在でも, 米国ではシークェルと 読まれるのが一般的である. だそうな。
448-486の書き込みにほのぼのとしたものを感じた
シークェルって読むと持てますか?
何を?
マイ父帰る
行き詰ってしまったので質問させていただきます。 mysplとphpを使った簡単なクイズのサイトを作りたいと考えております 現在、問題ID、問題文、5択なので選択肢5つ、解答とフィールドを作っており htmlのサイト上でそれらを呼び出し ラジオボランで正確な答えをチェックして 当たりかどうか判別してやる という所まではいけたのですが困った事が起きてしまいました。 現在では1つのページに問題が1問しか表示してないのですが、 一度に何問も表示させ判定したいと考えております。 問題だけをを沢山表示させることは可能なんですが、それぞれの問題に答えをチェックする ラジオボタンの表示にすごく困っております。 問題文は追加できるようになっており、現在存在する最後のID番号から+1した所に 追加されます。 すごく分かりにくい説明かもしれませんが どなたか分かる方おられましたら よろしくお願いいたします。
ラジオボタンなんだからグループ化すりゃいいだろ phpの問題じゃなくてhtmlの問題な
a.php <?php if($a = 1){ echo aaaa; if($b = 1){ include("b.php"); exit; } } else{ include("b.php"); } b.php <?php header("Location:c.php"); このようなスクリプトでa=1のときにはheader aleady sentとなってしまうので headerを既に送信済みか確認したいのですが、可能でしょうか?
なにを言う
>>501 aaaaを表示してからLocationってのが、そもそも無理ですから
>>501 お望みの挙動かどうか知らんが、こうすればエラーは出なくなる。
a.php
<?php
if($a = 1){
if($b = 1){
include("b.php");
exit;
}
echo aaaa;
}
else{
include("b.php");
}
505 :
501 :2005/10/07(金) 09:40:05 ID:???
説明下手ですみません。 aaaaを既に表示したか確認したいのです。 すでに表示してる場合はLocationを使わないようb.phpで処理したいです。 Locationを使えるか、使えないかの判別でもいいです。なにか方法はあるでしょうか?
506 :
499 :2005/10/07(金) 10:14:46 ID:???
>>500 返信ありがとうございます
こちらの説明不足で意味を取り違えてしまったようで本当に申し訳ないです
先ほどの質問は忘れてもらって、新たに質問させていただきます。
PHPの中でラジオボタンやラジオボタンの様な答えをチェックでき
その値を違うPHPに渡すという物を設置することは可能でしょうか?
507 :
nobodyさん :2005/10/07(金) 10:20:57 ID:ffDmuEnl
2次元の配列の要素全てに、デフォルトで1を入れたいと思ってるのですが for($i=0;$i<5;$i++){ for($j=0;$j<5;$j++){ $data[$i][$j] = "1"; } } とやるしか方法はないのでしょうか? もっとスマートな方法があったら教えてください。
>>507 foreachでarray_fillじゃ駄目?
510 :
509 :2005/10/07(金) 10:28:45 ID:???
すまん、勘違いしたかも。
>>509 無視してください。
>>507 方法はいくらでもあるが、結局それが一番スマートだと思う
>>511-512 回答ありがとうございます。
array_fill()のネストでも結局同じくらいの行数になりますし、
厨な私にはforで値を入れていくほうが読みやすいので
結局これでいこうと思っています。
どうもでした。
514 :
501 :2005/10/07(金) 11:08:48 ID:???
headerの前に出力があったかどうかを調べることはできませんか? 出力バッファを有効にすればエラーは出ないのですが、headerの前に出力があったのか調べる事はできませんか?
マニュアルの出力制御関数を参照
516 :
506 :2005/10/07(金) 11:36:12 ID:???
>>508 URLまでご用意していただき ありがとうございます
しかしそのサイトではPHPの中ではなくHTML文の中にフォームを作って値を渡しているので
参考にはなりませんでした。 せっかく答えていただいたのに申しわけないです。
ご説明がまだまだ不十分でしたね・・・ 今度こそ分かりやすいはず
<?php ?>の中のPHP内部にラジオボタンやラジオボタンの様な答えをチェックでき
その値を違うPHPに渡すという物を設置することは可能でしょうか?
>>514 普通はheader送るタイミングは自分で制御するもんだからなぁ・・・
>>516 相変わらずわけわからん。
「phpの中にラジオボタンの様な答えをチェック」という辺りを
もうちょっとわかりやすく書けないか?
全然説明が判らないな。 ・PHPはサーバー側で動作 ・ラジオボタンの表示、選択はクライアント側で動作 が理解できてるのかな。。。という疑問があるんだけど。 「ラジオボタンの様な答えをチェックでき」のチェック操作を行うのは誰? 人間が行うのなら、上記が理解できていないと思う。 PHPで行うのなら header('Location:xxx.php?checkbox=1');等でいいと思う。
519 :
516 :2005/10/07(金) 11:54:30 ID:???
>>517 う〜ん なかなか言葉で説明するのが難しいですね・・・
>>「phpの中にラジオボタンの様な答えをチェック」という辺りをもうちょっとわかりやすく書けないか?
ラジオボタンです 要は<?php ?>の中にラジオボタンを作成したいのです
現在fromを利用してphpの外で実行した場合は成功しております
while文や変数を利用したラジオボタンを作りたいので、PHPの中に入れて
やりたいのですが 可能でしょうか?
520 :
501 :2005/10/07(金) 11:56:49 ID:???
レスいただいた方ありがとうございます。
出力バッファを使うことにしました。
>>516 508です。
PHPとMYSQLを使って作りたいとのことですが、PHPとMYSQL利用の経験はお持ちでしょうか?
DBから問題を取得→表示
ユーザーからの解答があったら
問題の答案を取得→DBから解答取得→回答正誤判定→結果表示
こんな流れになるのではないかと思いますが、PHPとMYSQLをこれから勉強するなら
HTMLとPHPとMYSQLを使ってデータの出し入れの勉強してみるとよくわかると思いますよ。
521 :
518 :2005/10/07(金) 11:57:42 ID:???
まさかと思うが、こんな答えを期待してたのかな。。。 <?php echo '<INPUT TYPE="radio" NAME="data" VALUE="1">テスト1'; echo '<INPUT TYPE="radio" NAME="data" VALUE="2">テスト2'; ?>
522 :
501 :2005/10/07(金) 11:59:35 ID:???
>>519 <?php
echo '<form action="" method="post">
選択肢1<input type="radio" name="Q1" value="aa">
</form>';
こういうことですか?
523 :
522 :2005/10/07(金) 12:00:24 ID:???
>>516 ラジオボタンを表示してcheck.phpに値を送られる
<?php
echo '<form action="check.php" method="post">';
for ($i = 0; $i < 5; $i++) {
echo '<input type="radio" name="q[0]" value="'.$i.'">'.$i;
}
echo '<input type="submit">';
echo '</form>';
?>
まさかprintもechoも知らないで組んでたのか・・・?
これこそPHPクオリティ
527 :
516 :2005/10/07(金) 12:46:33 ID:???
たくさんの返信ありがとうございました。
>>521 >>522 >>524 さんの言われておるようにやってみたところ
無事に出来ました こちらもprintなどでラジオボタンの所を
くくってやってみていたのですが 出来ませんでした。
シングルでくくらずにダブルコートでくくっておりました・・・
printじゃ出来ないと思って質問してみたのですがptirntで出来たのですね
みなさんどうもありがとうございました
まずtypeをどうにかすべき
まずtypoをどうにかすべき
530 :
nobodyさん :2005/10/07(金) 13:51:42 ID:DMyUsnXK
サンプルコードに下記のようなものが出てきまして。<?php ?>が2つあるので、こんな書き方できるのかとびっくりしたのですが これは結局、分断しなければ echo '<form action = "next.php" method = "post">'; のように書かなければいけないところを、<?php ?>を分断することによって普通に、<form action = "next.php" method = "post"> のように書けるという解釈であってますか。 <body> <?php $text1 = @$_POST["text1"]; if(strlen($text1) < 1 or strlen($text1) > 10) { ?> <form action = "next.php" method = "post"> <table> <tr><td><font color = "red">1〜10バイトでお願いします</font><br> お名前:<input type = "text" name = "text1" value = "<?=$text1?>"</td> <td><input type = "submit" value = "送信"></td> </tr> </table> </form> <?php } else { echo "<p>正しく入力されました:".$text1; } ?> </body>
531 :
nobodyさん :2005/10/07(金) 14:03:31 ID:3gINL/Ei
>>530 ○
そっちの方が負荷がかからないらしいけど実際は俺はシラン。
532 :
530 :2005/10/07(金) 14:07:58 ID:DMyUsnXK
>>531 回答ありがとうございます。
やっぱり、いろんな書き方ができる中のひとつだったんですね。
個人的にはこの方が、HTMLタグそのまんま書き込めるからわかりやすいですね。
PHPスクリプトからHTMLタグを吐き出す場合
echo 使って ""で囲んだり、中の"を\"にしたり、''で囲んだりするのが面倒だなと思ってたので
こんな方法があったなんてうれしいな。
更に、本当に負荷がかからないとすれば、この書き方推奨ですね。
>>530 PHPはもともとhtmlの中に<?php ?>というタグでスクリプトを埋め込めるというふうに作られた
<html>
<body>
<?php 処理 ?>
html タグ
<?php 処理 ?>
html タグ
<?php 処理 ?>
</body>
</html>
>>532 一応、こういう方法もあるということで(負荷はしらん)
if(strlen($text1) < 1 or strlen($text1) > 10)
{
echo <<<EOD
<form action = "next.php" method = "post">
<table>
<tr><td><font color = "red">1〜10バイトでお願いします</font><br>
お名前:<input type = "text" name = "text1" value = "{$text1}" ></td>
<td><input type = "submit" value = "送信"></td>
</tr>
</table>
</form>
EOD;
}
else
{
echo "<p>正しく入力されました:".$x;
}
535 :
534 :2005/10/07(金) 14:15:57 ID:???
>>534 いや〜ん。Ctrl+Xを押したつもりが・・・
echo "<p>正しく入力されました:".$x;
は
echo "<p>正しく入力されました:".$text1;
ね。
536 :
530 :2005/10/07(金) 14:25:08 ID:DMyUsnXK
皆さん、具体例での解説ありがとうございます。
>>533 そうか。こんなに柔軟に<?php ?>とHTMLタグを組み合わせられるんですね。
今まで<?php ?>とHTMLタグが、<body>タグの間できれいに分離してるコードしか見たことなかったので
<?php ?>とHTMLタグは、<body>タグの中で分離して書くもんだと思い込んでたものでびっくりしたわけです。
>>534 こんな書き方もあるのか、同じ処理でもいろんな書き方があるもんですね。
こっちの方が、書き方がスマートな感じしますね。
これもPHPスクリプトでHTMLタグ出力するのに、""で囲んだりもいらずにそのままかけますね。
537 :
nobodyさん :2005/10/07(金) 14:25:16 ID:/ul7fY5m
初歩的な質問失礼いたします。 PHPを勉強しようと思い、本を買ってきて勉強しているのですが最初の時点で躓いています。 本にあるとおりに、Apache1.3.27とPHP4.2.2をインストールしてハローPHPと表示させようと思ったのですが ブラウザで見たときに日本語が文字化けしてしまいます。 ブラウザのエンコードで自動選択にすれば問題なく表示はされるのですが、以前表示させたときには文字化けなんてしませんでした。 これは何が悪いのでしょうか?iniファイルの書き換えミスか、そもそもブラウザ側が悪いのでしょうか?
>>537 せっかくプログラミングの世界に入ってきたのですから、「文字化け」という曖昧な説明ではなく、
「〜の文字エンコーディングで出力するつもりが、ブラウザによって〜の文字エンコーディングと解釈されてしまいます。」
のような説明をするようにしましょう。
ブラウザは次の3点に注目して表示に使う文字エンコーディグを決定します。
・HTTPヘッダ Content-Type: text/html; charset=shift_jis
・HTMLヘッダ <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
・html文章内の一部を使って判定
これらの指定が矛盾していた場合等で表示に使う文字エンコーディングが実際のものとちがっていれば、
いわゆる「文字化け」を起こす原因となります。
539 :
nobodyさん :2005/10/07(金) 15:00:14 ID:DMyUsnXK
ふと思ったんですけど 今は、自分のPCでPHPの動く環境を作ってるから、php.iniをいじって設定を変えたりできるけど。 レンタルサーバなんかに置かせてもらう場合、そのサーバのphp.iniっていじることはできないんですよね。 1サーバにつき、1php.iniだと思うのですが合ってるでしょうか。 なので、PHPに、get_magic_quotes_gpc()みたいな、magec_quotes_gpcがONかOFFか調べる関数とかがあるんですよね。 ということはレンタルサーバに自作のPHPで作ったアップローダを置くとすると アップできるファイルサイズの上限は、そのレンタルサーバのphp.iniの設定に依存するわけですか。
>>536 そんなことくらい、PHPマニュアルに書いてあるが?
544 :
nobodyさん :2005/10/07(金) 15:54:56 ID:DMyUsnXK
PHPマニュアル見ないで、書籍のサンプルコード集打ち込みながら学習してるから知らなかったんだよ。 PHPマニュアルの目次見ても、型、変数、定数、演算子、制御構造、関数、クラスとオブジェクトとか、他言語を知ってたら見なくても いいような内容ばっかりに見えたので、これ1から見ながらやってたら遠回りかなと思っていきなりサンプルコード集買ったんですよね。 PHPを実行できる環境を整える方法から書かれてる書籍の方が便利だし。 PHP独特の書き方とかわかれば、後は他言語で身につけた基礎知識がカバーするだろうと思って。 でもこの際なので知識補完といった意味で目を通しとこうかなとは思います。 まあ、書き方が有料の書籍と違ってわかりにくいから避けてたのですが、書籍で使える知識を身につけてから PHPマニュアルも補完的に目を通すという読み方にするとPHPマニュアルに書かれた内容もわかりやすいかなとは思います。
>>539 マニュアルのini_set()を見ればわかるけど.htaccessやスクリプト内で変更できるものもある
upload_max_filesizeは変更できないがな
医科のperlをphpで書けばどうなりますか?
#!/usr/bin/perl
use LWP 5.7X;
use Encode;
use URI;
my $browser = LWP::UserAgent->new;
my $url = URI->new('
http://www.hogehoge.com/cgi-bin/hogehoge.cgi ');
$url->query_form(
foo => 'bar' ,
);
my $response = $browser->get($url );
die $url , " Error!", $response->status_line unless $response->is_success;
print $response->content;
547 :
546 :2005/10/07(金) 16:35:32 ID:???
上記 use Encode; の行は削除してください。
548 :
539 :2005/10/07(金) 16:37:24 ID:DMyUsnXK
>>545 スクリプトから設定ファイルをいじれる関数があるんですね。
でも全部いじれるわけじゃないのですね。
マニュアルみたら、php.iniの設定の一覧が出て、変更の可否の項目を見ればいいのだと思うのですが
PHPマニュアルも便利ですね。
調べてみたら
PHP_INI_ALL、PHP_INI_PERDIRだと、.htaccessで変更可能らしい。
ちなみに
http://www.shigeweb.jp/php/project_p/?section=setup&page=htaccess に書いてる。
upload_max_filesizeを見るとPHP_INI_PERDIRになってるので、.htaccessで設定変更できることになりますよね。
でも変更できないということは、スクリプトから変更できないけど、.htaccessだったらできるということかな。
設定できるできないみたいにはっきりしてるのかと思ったら、この設定はこの方法でできるけど、この設定はこの方法では変更できない
みたいにいろいろあってややこしいですね。
どうも解説ありがとうございました。
550 :
546 :2005/10/07(金) 16:44:34 ID:???
551 :
545 :2005/10/07(金) 16:52:49 ID:???
>>548 俺の使ってるchmファイルではPHP_INI_SYSTEMになってる(´・ω・`)
新しいのをダウンロードしなおした
552 :
539 :2005/10/07(金) 16:59:12 ID:???
>>551 バージョンによっても変わっていくわけですね。非常にややこしいけどしょうがないか。
自分の持ってるマニュアルのバージョンも要チェックだし、サイトでも一覧のせてるところあるけどそういうとこでも
バージョン古かったら意味なしですね。
更に、レンタルサーバにおく場合は、そのレンタルサーバのPHPのバージョンもチェックすべきなんだろうな。
まあ一手間、調べればいいんだもんね。気をつけてチェックしましょうということなんですね。
質問ですが。 ログファイルの行数を知りたいんですが、以下の 2 つのうち、どっちの方が優れてるんでしょう? 1: $line = 0; $fp = fopen($log_file, "r"); while($temp = fgets($fp)) $line++; fclose($fp); 2: $line = shell_exec("wc -l $log_file"); $line = preg_replace("/^([\d]+).+$/", "$1", $line);
>>553 2 に関しては、引数をちゃんとチェックしないと、変なコマンドを打たれる可能性
を否定できないぽ。
>>554 言葉が足りませんでしたね。
このプログラムはユーザーの入力値は全く関与しないんです。
$log_file はプログラム内部で作ってる変数です。
556 :
553 :2005/10/07(金) 19:34:33 ID:???
もうちょっと補足します。 ログファイルはは 20 個あり、for 文で回して、行数だけ取得するようにしたいのです。 $data = array(); for($i=0; $i<20; $i++) { // ファイル名は 0.log のようにしてます // 行数取得して $line に格納 $data[$i] = $line; } こういう感じで作ってます。
1,000 回くらい回してベンチすれば?
558 :
nobodyさん :2005/10/07(金) 20:15:04 ID:dcjESLNV
png2wbmp("test.png","test.bmp"); とやって、PNGの画像をBMPに変換したいのですが Warning: Wrong parameter count for png2wbmp() とエラーが出てしまいます。 png2wbmp("test.png","test.bmp",100,100); とパラメータを付け足しても同様のエラーが出てしまいます。 なにがいけないのでしょうか?
559 :
553 :2005/10/07(金) 20:18:23 ID:???
特に、こっちの方が断然いい、みたいなことな無いみたいですね。 行数を確認するためだけにファイルをオープンするのは、他のプログラムでの書き込みに影響を与えそうですので、 2 の方でやってみようと思います。 ありがとうございました。
>>558 int png2wbmp ( string pngname, string wbmpname, int d_height, int d_width, int threshold)
末尾のパラメータ threshold が足りないようだが?
>>559 シェル呼び出すだけでも地味に時間かかるよ?
$a = file("log.dat"); count($a); じゃだめかな。
563 :
553 :2005/10/07(金) 20:43:51 ID:???
>>561 やっぱりそうですか・・・
Windows の方で作ってますので動作確認をするために現在は 1 の方法でやってました。
サーバーにアップする時点で 2 の方に変えようと思ってたんですが。
1 の方でやっていきます。
ありがとうございました。
>>562 ログファイル自体は重くないのでそれでも大丈夫だとは思いますが。
file をするとログファイルを全部読み込んでしまうので、どうかと思ったんです。
また、ログファイルの内容が必要なわけでもありませんので。
ですので、fgets で値を捨てながら行数をカウントしようと思ったんです。
どうもありがとうございます。
565 :
nobodyさん :2005/10/07(金) 21:35:54 ID:npAyk4uf
PHPで複数ファイルをアップロードする場合、ディレクトリ配下を 一括で指定してアップロードできないのでしょうか? 色々と調べたのですが、一ファイルずつ選択する方法しか見つ かりませんでした。 誰か私に知恵を貸して下さい。お願いします
>>565 考えよう。
鯖からキミのパソコンの中身が見えないと、ディレクトリ指定はできないでしょ。
WebDAVとか使うなら分からんでもない。
>>565 逆にキミのパソコンの中身が見える(セキュリティ上の意味でも)状況なら可能になる。
鯖側のPHPの話ではなくなるけど、ブラウザ上で動くActiveXを使ったものとかあるね。
hogehoge=1921 hogehoge=4441 のような形式の文字列があったとして数字の部分だけを正規表現で置き換える場合にはどのようにすれば良いでしょうか アドバイスお願いします
hogehoge の部分が問題だとは思うけど・・・ ^(.+=)([\d]+)$ でマッチするんじゃ? $str = "hogehoge=1921"; $str = preg_replace("/^(.+=)([\d]+)$/", "$1"."1111", $str); って感じかなぁ。
>>569 丸括弧で保存する意味が無いよ
$str = preg_replace("/\d+$/", "1111", $str);
>>570 いや、終端符すらイランだろう。
$str = preg_replace("/\d+/", "1111", $str);
指定したURLの文字列を保存するには以下の方法で出来るのですが、
画像ファイル等を保存する場合はどのような方法がありますか?
<?php
$files = file_get_contents("
http://www.yahoo.co.jp/ ");
$logfile ="sample.html";
$fp = fopen("$logfile","w");
fputs($fp, $files);
fclose($fp);
?>
つ [ ファイルシステム関数 ]
>>574 すぐに思いつくのは
php.iniの設定がおかしい
データベースを使用しているのならデータ書き込み時のエスケープ処理がおかしい
ぐらい。
おまいさんが作ったスクリプトなら環境を書け。
そうでないのならそのサイトの管理者に報告せよ。
576 :
575 :2005/10/08(土) 00:06:16 ID:???
書き漏れた orz "php 表 文字化け" でググってみれば何か参考になるやもしれぬ。
577 :
nobodyさん :2005/10/08(土) 00:53:46 ID:/UyAJWR0
>>534 ヒアドキュメントは漏れはすごいいっぱい使ってる。
$hoge =<<<hage
いろいろ
hage;
って感じで。
これだけ別ファイルにして置けば、phpわかんないけどhtmlは解るって顧客が更新できるから。
PHPをRHEL3にインストールしようとしておりますが、 DBにSybaseを利用しようとして、PHPのコンパイルオプションに --with-sybaseを入れると、失敗してしまいます。 (--with-sybaseオプションを外すと、PHPのコンパイルに成功します) PHPでSybaseを利用する方法をご存知の方は、 是非教えていただけないでしょうか。 なお、詳細な情報(環境など)を以下に記載します。 ・OS RHEL3 ・PHP 4.3.11 ・DB Sybase11.0.3 ・Apache 1.3.33 ・--with-sybase追加時に、make時に発生するエラーメッセージ /opt/sybase/lib/libsybdb.so: `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead /opt/sybase/lib/libsybdb.so: `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead /opt/sybase/lib/libsybdb.so: undefined reference to `__ctype_b' /opt/sybase/lib/libsybdb.so: undefined reference to `__ctype_tolower' collect2: ld returned 1 exit status gmake: *** [sapi/cli/php] エラー 1
>>573 文字列以外を読み込む関数がわかりません。
画像・音声・フラッシュ等は無理なのでしょうか?
582 :
nobodyさん :2005/10/08(土) 03:30:52 ID:CIqOzoxd
HPを作っているんですがメニューやCGIを表示させるのに PHPを使おうかSSIを使おうか迷っています。 サーバーに不可がかからず表示が早いのはどちらが早いんでしょうか?
静的なメニューならHTMLで。 鯖のことを考えるなら本当にCGIが必要かどうかから検討すべき。 そうでないなら好きなほうで。
584 :
582 :2005/10/08(土) 04:23:18 ID:CIqOzoxd
>583さんありがとうございます。 動的なメニューです。 鯖への負荷や表示の速度は PHP、ssiどちらをつかっても変わらないってことですか?
>>584 中身が作りこまれてないのにどっちがなんて比較できないだろ?
まあ、テキストをincludeさせるだけなら、SSIの方が軽い。
586 :
582 :2005/10/08(土) 04:45:21 ID:CIqOzoxd
>>585 ありがとうございます、SSIでやってみます
>>586 SSIでCGI実行させるよりPHPのほうが早い
セキュリティの為、 GETで取得した値が3桁の数字以外だったらエラーという処理を行いたいのですが、 if(!(ereg("([0-9]{3})", $_GET['code']))){echo "不正な値です"; exit;}; 上記だと3桁以上の数字にもマッチしてしまいます。 どうすれば3桁の数字のみマッチする様になるのでしょうか?
みなさん、リロード対策ってどうやってますか? たとえばA.php(フォーム)からB.phpにPOSTして結果表示するとして、 B.phpではリロードをされたくない場合(リロードされたら処理を中止してエラーに)。 いろいろ考えてみたけど、かなり複雑にしないとリロード対策できないみたいね… リロード対策くらい標準関数またはライブラリで用意してほしいですね。
>>588 if(isset($_GET['code'])
&& is_numeric($_GET['code'])
&& strlen($_GET['code']) == 3){
echo "適正な値かも";
}else{
echo "不正な値です";
exit;
}
>>591 えっっ、セッションでどのように?
A.phpでセッション変数に値を格納しておいてB.phpでリロードしても、
ずっとセッション変数は格納されたままだからリロード判定には使えないのでは。。。
>>592 リロード対策 セッション あたりでぐぐる。
>>588 >>590 が正しいっちゃ正しいが、めっちゃ丁寧。
簡単に対応させたかったら、その正規表現を"^[0-9]{3}$"にするといいよ。
「^」が最初、「$」が最後って意味。今のまんまだと、3桁の数字が含まれてたら〜、になってるはず。
完全一致にこれはよく使うから覚えとくとよし。
するとよくないだろ
よくねーな
今、テキストにそって勉強している最中なのですが、つまづきました。 Linuxでsendmailを使ってメール送信をするプログラムなのですが、ちゃんと動かず、 どうも拡張モジュールがうまくいってないようだと思い、再確認したんですが コンパイル条件にも--enable-mbstringをつけてるし、php.iniのextension_dirも /usr/local/lib/php/extを指定しています。おかしいなと思って確認すると、 phpフォルダ下にextフォルダがありません。これってどういうことでしょうか?インストールがうまくいってなかったってことですかね? どなたかアドバイスお願いします。 環境はFedoraCore4,php5.0.4です。
>>588 セキュリティのためってんならGET使うな
>>597 色んな可能性が考えられる。
phpinfoで確認して全部正しいか確認しる。
extension_dirはサーバーによって違ったりするから自分で確認して再セット。
あとはブラウザから呼び出して実行とかしてるんなら、php.ini弄ったらapache再起動な。
>>597 これってどういうこともなにも、そのまんま、無いってことだろ
cd /usr/local/lib/php/ext
が通るか?
601 :
588 :2005/10/08(土) 13:30:39 ID:???
>>590 >>594 >>598 ありがとうございました。
590氏がソースまで記述してくれたので、
これを手本にやってみます。
完全一致の件も参考になりました。
>588 正規表現の話なら ^[0-9]{3}$ とか
>>597 PHPのconfigure時に--enable-mbstringを付けてビルドしたのなら、mbstring関数は *静的* に組み込まれる。
なので、mbstringに関しては、extフォルダやmbstring.soがどうこうは関係ない。
<?php phpinfo(); ?>を実行して、Multibyte Supportがenabledになっているかどうかを確認してみたら?
ただ、sendmailが動作しない→拡張モジュールがうまくいっていない、という判断は正しいのかな。
sendmailが動かないというスクリプト、エラーメッセージ等を晒した方が早いんじゃないかな。
>>594 指摘済みだがそれだと4文字以上もマッチする。
>>597 とりあえずSendmail叩くプログラムは拡張モジュールじゃない。
スレタイ見てクソスレかと思ったら、 おまいら親切だな。 質問があるんだが、もう少しROMしてFAQ調べて、 切り分けて、環境書いて聞くことにする。 良スレだ。
607 :
nobodyさん :2005/10/08(土) 14:50:36 ID:51SvXaJn
はじめまして。
PHPのプログラムを作りたいと思っているのですが、お教えいただきたいことがございます。
作りたいと思っているのは、HP上に申し込みフォームのようなものを作成し、送信していただいたものを
メールで受け取るというものです。
そこでネット上でその一連の処理のサンプルプログラムをもらったのですがフォームの項目などを
自分が望むように作り変えるには、どの部分を変更すればいのでしょうか?
そのサンプルをアップローダーにあげていますのでどなたかご教授願えませんでしょうか?
サンプルです↓
indexと完了画面と自作のライブラリが入っています。(この自作のライブラリの意味がまったくわかっていないのですが
何もいじらなくても大丈夫でしょうか?)
http://up.spawn.jp/file/up1899.lzh 私自身、付け焼刃の知識なのですが、indexの上のほうの入力チェックのところと、メール送信処理の部分と最後のフォーム
の項目を作るところを変更すればよいと思うのですが違うのでしょうか?
フォームの項目を追加したりするのは大丈夫だったのですが、最初の方の入力チェックのところを変更するとブラウザで
表示させても真っ白な画面になってしまいました。なぜでしょうか?
上記のサンプルに自分自身でフリガナの項目を追加したものも上げますのでどこが間違っているかご指摘願えませんでしょうか?
サンプルです↓(なぜか真っ白になってしまい、表示されない)
http://up.spawn.jp/file/up1900.lzh phpファイルがupできないためlzhファイルに圧縮していることをお許しください。
長文失礼いたしました。
>>607 up1900.lzh に含まれる index.php だけど、10行目の先頭が全角スペースになってるね。
if ( $_REQUEST[ "VALUE_KANA" ] == "" ) {
~~
半角スペースにすれば大丈夫だと思うよ。
php.ini の display_errors を On に設定すれば、真っ白ページではなく
ブラウザにエラーメッセージを表示してくれるので設定しておくといい。
昔の田舎の交番に居たお巡りさんくらい親切だな。
610 :
608 :2005/10/08(土) 15:41:22 ID:???
>>607 up1899.lzh の方も見てみた。おまいさんが書いた、
indexの上のほうの入力チェックのところと、メール送信処理の部分と最後のフォームの項目を作るところを変更
で大丈夫。index.php 以外は触らなくてもいい。
ただ、元のスクリプト自体が結構いいかげんなので
>>608 で書いた display_errors = On にすると
警告メッセージが一杯表示されてしまうので、
display_errors = On
error_reporting = E_ALL & ~E_NOTICE
の両方を設定するか、元のスクリプトを修正(こちらの対応が望ましい)した方がいい。
他にも mb_xxx の文字コード指定等、修正した方がいいところはあるけど、キリがないのでこの辺で。。。
>>609 暇だったもので。
611 :
597 :2005/10/08(土) 16:50:54 ID:wzJ6Bsx7
皆さんレスありがとうございます。
>>599 >>603 phpinfoの一部をコピペします。
Configure Command './configure' '--with-apxs2=/usr/local/apache2/bin/apxs' '--with-gd' '--with-zlib' '--enable-mbstring' '--enable-trans-sid' '--enable-soap'
mbstring
Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation enabled
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 3.7.0
エラーメッセージらしきもの
Warning: mb_send_mail() [function.mb-send-mail]: Missing To: field in /usr/local/apache2/htdocs/php10/day04-1/sendmail.php on line 9
>>600 通りません。phpの下にextがありません。
612 :
597 :2005/10/08(土) 16:51:49 ID:wzJ6Bsx7
sendmail.php(本に載っているものそのままです) <?php $header_info="From: ".$_POST['_from']."\nContent-Type: text/plain;charset=ISO-2022-JP\nX-Mailer: PHP/".phpversion(); $body="■■".$_POST['_subject']."■■\n\n"; foreach($_POST as $key=>$value){ if(!strstr($key,"_")){ $body.="[".$key."]".$value."\r\n"; } } mb_send_mail($_POST['_email'],$_POST['_subject'],$body,$header_info); header("Location: ".$_POST['_result']); ?> ちなみにapacheを立ててやってます。sendmailのパスは/usr/sbin/sendmail -t -i -f〇○○@〇○○.co.jp (自分のアドレス) どうでしょうか???
内部的に組み込まれた関数をcall_user_func()みたいに関数名を指定して呼び出したいのですが、 そんな関数はないのでしょうか?
614 :
597 :2005/10/08(土) 16:57:05 ID:???
追記 ちなみにwindowsでは同じプログラムでメールが送れました。
616 :
603 :2005/10/08(土) 17:05:13 ID:???
>>611-612 エラーメッセージが Missing To: field なので
mb_send_mail($_POST['_email'],$_POST['_subject'],$body,$header_info);
行で参照している $_POST['_email'] の中身が空なんだと思う。
sendmail.php を呼び出している側を見直してみたら?
とりあえずメールが送信できるかどうかのテストなら
mb_send_mail('おまいさんのメールアドレス',$_POST['_subject'],$body,$header_info);
でテストはできるけれど。
>>613 「内部的に組み込まれた関数」をもう少し正確に。
スクリプト内部で定義した関数は、そのまま関数名で呼べるし
文字列に入ってる関数名でも呼べる手段がある。
そういうことを言いたいのじゃないと思うけど。
>>613 質問の意味は判らんが、可変関数かeval
619 :
597 :2005/10/08(土) 17:54:17 ID:wzJ6Bsx7
>>616 なんか説明不足ですみません。
このシステムはmail_input.phpからsendmail.phpを呼び出すプログラムなので
値はちゃんと渡されていると思います。さっきのエラーメッセージはsendmail.phpに直接アクセスしたときのものでした。
ちなみに
<?php mb_send_mail(アドレス,件名,本文); ?>
というプログラムにアクセスしてもメールは送られませんでした。
ということはやはり拡張関数がうまく機能していないのではないでしょうか?
また、各サイトを回ってみましたが、/usr/local/lib/php/extが無いという例はありませんでした。
やはりphpフォルダの下に、*.soを含むextフォルダが無いことが原因でしょうか?
>>619 簡単なスクリプトで
sendmailコマンド自体が叩けるかどうかをまず確認した方が。
>>619 phpinfo()のほうが詳しいが、$ php -mで組み込まれてるモジュールが見える。
上で言われてるように静的に組み込まれてるんだよ。そういう風にConfigurしてるんだから。
soが出来るのは --with-foobar=shared のように指定した場合だけ。
あと「渡されていると思います」って何?
622 :
597 :2005/10/08(土) 18:14:37 ID:???
>>620 すみません、もう少し詳しくお願いします。。。
>>619 >やはりphpフォルダの下に、*.soを含むextフォルダが無いことが原因でしょうか?
本当に
>>603 を読んだ上での発言なのか?
>>620 同感。fc4ならデフォでsendmail動いてるし、パスもiniそのままで通るはずだけどね。
625 :
623 :2005/10/08(土) 18:25:39 ID:???
sendmailのパスを書いてあるけど、これはphp.iniに sendmail_path =/usr/sbin/sendmail -t -i -f〇○○@〇○○.co.jp と設定しているって意味でいいんだよな? phpが動作しているサーバーにログインして echo "To: 送信先メールアドレス" | /usr/sbin/sendmail -f〇○○@〇○○.co.jp で正常にメール(タイトル、本文は空)は届くのか?
>>622 ただ単にphpから、sendmailコマンドでメール送るだけのプログラムを書く。
文字通りそれだけ。
つーか、fc4の環境は知らんが、/usr/sbin/ なんていきなり叩けるのか?
627 :
613 :2005/10/08(土) 18:46:34 ID:???
>>617 >>618 すみません、言葉足らずでした。
strlen()やarray_push()みたいに予め用意されている関数のことです。
自鯖ではMySQLを使っているのですが、レン鯖ではSQLiteな為、
関数呼び出しの度に場合分けするよりcall_user_func()みたいに指定して呼び出すことが出来れば
場合分けが1度ですみ楽だなぁと思ったもので・・・
なんにしてもPHPの問題じゃなさそうだね。
PHPでログインフォームを作成しています。 テキストボックスにパスワードなどを入れて、キーボードのEnterキーを 押すと、submitボタンがクリックしてログイン出来るというのが普通だと 思うのですが、なぜかEnterキーを押しても反応しません。 マウスで送信ボタンを押さないと。。 これってどうしてこうなるのでしょうか?なにかFormに設定や記述が必要なのでしょうか?
PHPでフォーム作ってんの? HTMLで作ってんじゃないの? テキストボックスにパスワードですか。 テキストボックスが複数あるとエンターで送信出来なかったりするらしい。 実験してないから知らんけど。 ユーザ名はテキストボックスで、パスワードはtype=passwordにしてみれば? 関係ないけど、 >submitボタンがクリックしてログイン出来る 日本語が変ですよ。
>>629 その辺はブラウザが行う動作なのでPHPは関係ないし、ブラウザ毎の振舞いの話なので
オマイさんの言う「普通」というのはありえないよ。
確かにそのように動作してくれるブラウザの方が多いとは思うけれど。
別のブラウザで試してみるか、動作しなかったブラウザをカキコしてみればだれか
追試してくれるかもね。
参考までに以下のブラウザでは大丈夫だったよ。
IE6 SP2、Opera8.01、Firefox1.0.7
確認なんだが、本当に submit ボタンなのか?
属性が button で javascript で submit しているとかではないよな?
一組のフォームタグの中にテキストボックスとボタンをきちんと配置してあれば 入力欄が複数あってもEnterキーで送信されると思うんだけどな。 あ、でもNetscape4.9ではダメだった。
633 :
630 :2005/10/08(土) 23:33:44 ID:???
よく使う関数を定義するのと、別ファイルに用意して単にincludeしちゃうのとどっちが処理が早いでしょうか?中身によりますか?
ログインフォームとかだと問題無いが、チャットの入力窓とかだと、ENTERで押せないとキツいな。 「リターンキー」と言ってしまう中年でした
>597
$headerinfoの中身をってかその場所直にでもええけど
"From:
[email protected] " ようはFrom: フィールド
だけにして試してみなされ。
スレ違いですけどよろしくおねがいします あるテーブルの内容が パターン表 { NO , CL1 , CL2 , CL3 } という4つの列で構成されていたとして CL表 { CL , CLNAME } への参照をしています。(CL1〜3 references cl(cl) ) SQLで、CL1,CL2,CL3に対応するCLNAMEを結果として出力するには どんなSQLがありますかね。。。orz
スレ違い
>>634 何故ベンチを取らないのか不思議だが
ファイルI/Oに構文解析という糞重い処理が、関数のコールより軽いわけが無い
何度もIncludeを繰り返すとかもうアホかと
ただし速ければいいというわけじゃなく意味的に関数にふさわしいかどうかは考慮する必要がある
本人も判ってるっぽいけど状況や要件によるだろうなぁ そういや今読んでるAjaxACのソースでもメソッド内で 外部ファイル読んで(requireだが)たりするな
>>640 何度も呼ばれる処理をinclude()するのが関数よ
りはやいケースって例えばどんなですか?
コンパイル済みのをメモリにキャッシュ出来るけど
それでもinclude()のスタックは削れないし、そも
そもこれはファイルの中身によるというわけでは
ないし。ピンとこないです。
マンコはやばいなマンコは
スレ違いと認識してんのに、よろしくお願いしますとか言って書いてくヤツってどんなズ太い神経してんだろうな
やたら長いソースなら分割した方が速い
4G超えるようなソースを書かせる職場は辞めたほうがいいぞ
PHPはcreate_function()がクズ。なんとかならんかねアレ
いいこと思いついた。お前書いてZendにサブミットしろ
Perlは40000行と、それを3000行くらいで分割なら後者が8倍くらい速かったが、PHPで試すのマンドクセ
Perl厨アホとか言われるから黙っててくれまいか。
言いたいことは伝わるし間違ってないと思うが? 上の質問読まずにレスしてるか関数を知らないという、ただそれだけのことだろ
[a] 麓b] ファイル一覧を表示させようとしています。 ディレクトリ[a]の中にディレクトリ[b]があります。 $dh = opendir("."); while(($entry = readdir($dh))){ print"$entry\n"; } ↑のようなPHPファイルをディレクトリ[a]に置いて実行するとディレクトリ[a]のファイル一覧が表示されるのですが、 $dh = opendir("./b"); としたところ . .. しか表示されません。ディレクトリ[b]のファイル一覧を表示するにはどのようにすればよいでしょう?
そういえば前から気になってたんだけど ディレクトリ開いたときに入ってくる . .. って一体なに?
655 :
597 :2005/10/09(日) 17:28:56 ID:GtXpmFa3
皆さんレスありがとうございます。もう一度確認してみます。 あと、おそらく今回とは関係ないのかもしれないですが、 /usr/local/lib/php/extが無いっていうのはおかしくないのですか? もしあとから動的に組込みたいときとか組み込めなくないですか?
>>654 前者はカレントディレクトリ、後者は1つ上のディレクトリ
657 :
652 :2005/10/09(日) 17:39:03 ID:???
[b]には.php .jpgファイルがいくつか入っています。
658 :
652 :2005/10/09(日) 17:45:48 ID:???
すみません自己解決しました。 is_fileだとjpgファイルは表示されないのですね。
>>658 表示されますよ。
どこかでミスをしているんでしょう。シャワーでもしてすっきりしてきませう
>>655 ディレクトリくらい必要なら作ればいいだけじゃないのか?
あと、どんなMakefile作ったかしらんがデフォだとLIBDIR/extensions/no-debug-non-zts-YYYYMMDD/*.soになるぞ
設定は自分の好みでやればいい
662 :
655 :2005/10/09(日) 18:57:30 ID:???
もともとインストールしたときにextフォルダに*.soが入ってるんじゃないんですか?
質問する前にマニュアルくらい読んだら?
文章中のスペースとタブをすべて消すにはどうすればいいんですか?
>>664 正規表現を使う。正規表現について調べよう。
666 :
597 :2005/10/09(日) 21:35:16 ID:GtXpmFa3
>>616 <?php
mb_send_mail("自分のアドレス","件名","文章");
?>
でもメールは届きませんでした。
>>625 その意味で正しいです。
cat 適当なファイル | /usr/sbin/sendmail アドレス
でもダメでした。
>>626 /usr/sbinは行けます。(叩けるっていうのはアクセスできるという意味でしょうか)
>>636 やってみましたけどうまくいきませんでした。
ただ/var/log/maillogを見るとログは残っているのでsendmailの設定の問題でしょうか?
667 :
nobodyさん :2005/10/09(日) 21:46:39 ID:JXyGtMyG
Solaris にインストールしたいんですけどやり方を教えてください。
>>666 >
>>625 > その意味で正しいです。
> cat 適当なファイル | /usr/sbin/sendmail アドレス
> でもダメでした。
>
>>626 > /usr/sbinは行けます。(叩けるっていうのはアクセスできるという意味でしょうか)
つまり、sendmailコマンドを知らないということか・・・。
「適当なファイル」じゃなくて、
>>625 の通りのことをやって(もちろん To: アドレスは自分に)
メールが届くかどうかをテストする。
「叩ける」というのは、コマンドが実行できること。
lsとかで /usr/sbin ディレクトリが見えるとかじゃないよ。
>>626 が言ってるのは、/usr/sbin/sendamail を nobody が実行できるの?ってこと。
670 :
597 :2005/10/09(日) 22:18:47 ID:???
>>668 コマンドラインで
echo "To: 送信先メールアドレス" | /usr/sbin/sendmail -f〇○○@〇○○.co.jp
でもRecipient names must be specified
と返ってきます。
sendmailをnobodyが実行できる、というのはパーミッションの問題でしょうか…?
一応755でした。
>>667 マニュアルのやり方で普通にコンパイルできるし
出来合いのパッケージもある
>>666 FC4でSendmail使うならネットワークと権限の適切な設定が必要
同じ事を繰り返してもダメよ >もう一度確認してみます
673 :
597 :2005/10/09(日) 22:47:11 ID:???
見てる限りConnection Refusedっぽいな。ログにあると思うけど。 いいかげんスレ違いなんで異動してもらいたい。
ちょ…親父が風呂ん中で寝てんだけど…。
676 :
nobodyさん :2005/10/10(月) 02:55:51 ID:9d+wLEX3
>>675 _,,..,,,,_
/ ,' 3 `ヽーっ
l ⊃ ⌒_つ
`'ー---‐'''''"
綺麗な顔してるだろ・・・死んでるんだぜ・・・それで・・・
風邪ひくぞ。
それ「で」?
漫画ネタじゃん、突っ込むなよ
誰かがアクセスしてきたときとか、特定の作業を行ったときに鯖からbeep音を出したいのだが、 ncurses_beep って使えるの?
>>681 Windows環境(4.4.0)だとundefined functionだった。
685 :
681 :2005/10/10(月) 15:32:06 ID:???
ncurses_beepの件、 超過疎なロダ鯖なので、誰かがダウンロードしようとしたら「ピッ!」なんて鳴るといいかなと。 「あっ、お客さんだぁ!」 わぁいヽ(∇⌒ヽ)(ノ⌒∇)ノわぁい♪ ってな感じで・・・
>>685 ロダだったらどこかのロダを必要としてるスレに張れば賑わうよ
そのうち管理するのもだるくなる。。。
if($_COOKIE['rec']<time()) setcookie('rec',time()+1*24*60*60,time()+1*24*60*60); と言う風にCookieを発行して、発酵されるのを確認したんだが、 if($_COOKIE['rec']<time()){ 〜〜〜処理〜〜〜 } が常に実行されてしまう。 $_COOKIEに値を確認したら何も値が入っていなかった。 鯖:XREA無料 ローカル(WinXP+Apache2)では正常動作してくれたんだが・・・・・・・ だれか解決法頼む。
>>688 ダメだ、$_COOKIE['rec']<time()を両方
(isset($_COOKIE['recountDay']) && $_COOKIE['recountDay']<time()) || !isset($_COOKIE['recountDay'])
にしたが実行されてしまう。
ミスったrecountDay→rec 実際のスクリプトでは間違ってないから大丈夫。
>>689 その条件文ならrecがなければtrueになるのは当然でしょ
>>691 Cookieが無い場合、若しくは現在時刻より以前の場合に実行したいんだ。
693 :
nobodyさん :2005/10/10(月) 16:39:30 ID:lawxVnGW
正規表現の質問ですが複数行にわたった記述をしてある場合にマッチさせるにはどうすればよいのでしょ うか? 例:<TD align=left class=top colSpan=3 vAlign=bottom width=468> 対象文字列 </TD> のような場合。
>>693 一気に読み込んで pregで複数行マッチ(mオプション)。
>>692 &&は||より優先度が高い。(マニュアルの 言語リファレンス/演算子/演算子の優先順位 より)
>>689 の条件式だと、セットされてない場合は常にtrueになる。
まさしく希望通りに動作している。
>>692 そういう話か
.htaccessで
php_flag register_globals Off
とするか
$_COOKIE['rec']のかわりに$recを使って見て
698 :
687 :2005/10/10(月) 16:57:53 ID:???
IDが表示されないのか。気づかなかった
>>695 じゃあ括弧要らなかったな。
>>696 ダメだ、両方ともやったがCookieに値が入らない
699 :
687 :2005/10/10(月) 17:03:43 ID:???
ちょっと実行方法の詳細書くわ。 テキストカウンタのスクリプトだから、別スクリプトからrequireで読ませてる。 別スクリプトは一階層上で、Cookieの発行は確認した。 当然setcookie使うからファイルの先頭で読ませて出力させる前にCookie発行させてる。
>>698 コード的には if (empty($_COOKIE['rec'] || $_COOKIE['rec'] < time()) {} でOK
s151のデフォルト設定では動作したよ
error_reporting(E_ALL);
setcookie('rec', time()+60*60, time()+60*60, '/', 'hoge.s151.xrea.com');
var_dump($_COOKIE);
>Cookieの発行は確認した
通信をキャプチャして見たってこと?
Set-CookieヘッダがあるのにブラウザがCookieを返してないとか
続き ブラウザがCookieフィールドを送ってるのに$_COOKIEがNULLとか そういう状態?
>>700 だめぽ
if (empty($_COOKIE['rec']) || $_COOKIE['rec'] < time()) {}
703 :
nobodyさん :2005/10/10(月) 17:35:39 ID:8yA4547b
>>699 いじってる間にブラウザに変なクッキー食わせちゃったんじゃないの?
クッキー消去してブラウザ再起動してみたらどうだろう
えーと
>>693 なのですが
初心者なもので一気に読み込んでというのがよくわかりません
サンプルを書いてもらえませんでしょうか?
何が分からないのか分からない。 複数行あるならそのように正規表現を書けばいいだけじゃない。
さっき知ったんだけどさぁ, $_SERVER['PHP_SELF']ってサニタイズしないとだめなんだね・・・ <form action="{$_SERVER['PHP_SELF']}"> こんな感じで使うと即あぼーん. セキュリティについて書いてあるサイトでもこういう風に 使ってるところがあったりするからまだ表面化してないのかな..
ああ,そうだ,これって常識? って聞こうとしてたんだった.
PHP_SELF 使わないからなぁ
>$_SERVER['PHP_SELF']はサニタイズしないとダメ 質問:なぜ危険なのか教えて。 #URLエンコードで送信した「<>"'」とかを、自動でデコードしてPHP_SELFに格納するならXSS脆弱性がありそうだけど、 #>現在実行しているスクリプトのファイル名です。ドキュメントルートから 取得されます。 #って書いてあるし、これのどこが危険なのだろうか・・?
712 :
707 :2005/10/11(火) 01:26:50 ID:???
>>712 なるほど、任意の文字列を表示させられるのは確かに危険ですね。
ありがとうございます、参考になりました。
すみません、ここに書いてもいいものか分からないのですが、
PHPなので質問させていただきます。
http://www.lovpop.net/apricot/の 「apricot」というPHPのアクセス解析を
アンインストールをせずに消してしまったのですが、
「apricot.php.data」というフォルダがどうやっても消せなくなりました。
中に何が入っているのかも「550 Permission Denied」と出てしまい分からない状態です。
設置し直してアンインストールしてみても駄目だったので
PHPから消せるだろうと思ったのですが
BBSに書いてあったunlinkとrmdirもうまくいきませんでした。
最後の手段としてサーバの管理人様に頼もうと思っているのですが、
もしも他に何か方法があればご教示願います。
Apache権限になってるとかか?
716 :
714 :2005/10/11(火) 03:47:31 ID:???
>715 たぶんそうだと思います。 こんな時間にすいまそん
それなら、PHPから削除してやれば出来る筈だが・・ うーむ・・
718 :
714 :2005/10/11(火) 04:19:26 ID:???
<?php unlink("./apricot/apricot.php.data/admin/area.txt"); 〜略〜 rmdir("./apricot/apricot.php.data/admin/"); rmdir("./apricot/apricot.php.data/"); ?> を実行したら消えたとBBSに書いてあったんですが、 フォルダ名を変えてみたりしてもなぜか一向に消える気配がないんです。
↓apricot.phpより。これ実行して無理なら管理者に聞いた方が早そう。 <?php $BASE = 'apricot.php' $dir_main = opendir("$BASE.data"); while (($ent = readdir($dir_main)) !== false) { $path_sub = "$BASE.data/$ent"; if (is_dir($path_sub) && $ent{0}!='.') { $dir_sub = opendir($path_sub); while (($ent_sub = readdir($dir_sub)) !== false) { $file_name = "$path_sub/$ent_sub"; if (is_file($file_name)) { unlink($file_name); } } closedir($dir_sub); rmdir($path_sub); } } closedir($dir_main); $result = rmdir("$BASE.data"); ?>
720 :
714 :2005/10/11(火) 04:51:59 ID:???
うおおーありがとうございます! しかしさっそく実行してみたんですが駄目でした……。 仰る通りサーバの管理者に訊いてみます。 本当にありがとうございました。
勉強がてらアクセス解析を作ってるんだけど、 ログってどんな形で保存すると使い勝手がいいの? みんなはどうしてるのか教えてください。
>>721 自分がどんな解析をしようとしていて、どんな解析処理をしようと考えているかによるでしょうな。
解析に必要な情報を処理が喰いやすい形で保存汁
724 :
nobodyさん :2005/10/11(火) 11:28:44 ID:lk3myPm8
1日に何千ものデータになるんならログなんかよりもデータベースになるだろうしな。 解析処理とサンプル数次第だと思う。 リファラーをとることになると多くなるんだよね・・・
725 :
nobodyさん :2005/10/11(火) 11:38:13 ID:oTT+29Sw
jpeg2wbmpやpng2wbmpの一番最後の引数の意味ってなんでしょうか? 直訳すると「敷居」なんですが…。 これで、BMP画像ファイルを自動生成して、Excelに貼付けたいのですが 正常なBMPファイルが生成出来ないです。
bmp 貼れないの?
脱字.bmp じゃないと貼れないの?
728 :
nobodyさん :2005/10/11(火) 12:02:53 ID:QJ4uo7le
PHPスクリプトでPDFファイルを生成した時に、文字化けしてしまいます。 今は、pdf_set_font($pdf,"Times-Roman",35,"host");としているのですが、 ↑ この部分をどう変えればよいのですか?
729 :
728 :2005/10/11(火) 12:05:10 ID:QJ4uo7le
すいません、矢印ずれました。 "Times-Roman"の部分をどう直すか、という意味です。
>>725 なんでエクセルがでくるの?
wbmpはウィンドェズビットマップじゃないよ
ここで処理を〜秒停止するみたいな関数ありますでしょうか?
733 :
731 :2005/10/11(火) 12:22:22 ID:???
書き込んだ途端見つけることができました。 sleepですね。
>>728 どんな環境でやってるのか知らんが、「HeiseiMin-W3」とかは?
pdf_set_fontを宣言しないで出すとどうなる?
735 :
725 :2005/10/11(火) 13:48:31 ID:???
jpGraphでPNGもしくはJPEG形式でグラフを作成し、それを
SpreadsheetExcelWriterでExcelに貼付けるという作業を
やっているんですが、SpreadsheetExcelWriteがBMP形式しか
サポートしていないので、BMPに変換したいのです。
>>730 そうだったのですか orz
とりあえず、JPEGで書き出して、djpegコマンドでBMPに変換して
貼付けてみる事で対処しました。
スーパーグローバル変数のGETを使いtest.php?id=1にアクセスした場合はaと表示しtest.php?id=2にアクセスした場合はbと表示することはできるのでしょうか? できるならばだいたいでいいのでソースを書いてもらえないでしょうか。 ちなみにFormを使うGETは使い方をマスターしたんですが上記みたいなことができないんです。
くだらねぇ.実にくだらねぇ このスレにぴったりの質問だ. ↓回答
残念。それは私のおいなりさんだ
アホでしょ? <?php if ($_GET['id'] == 1) { echo 'a'; } else if ($_GET['id'] == 2) { echo 'b'; } ?>
お伺いしたいのですが、 phpで作成されたxml(html)ファイルを ダウンロードさせるということは可能ですか? 作成されたxml(html)ファイルとは画面に表示されたという意味です。 ご存知の方よろしくお願いします。
742 :
nobodyさん :2005/10/11(火) 17:55:09 ID:G45STU1Q
>>741 名前をつけて保存とかさせればええやん。
というのはおいといて、アクセスしたらダウンロードさせたいの?
それなら、
header ("Content-Disposition: attachment; filename=$filename");
とかをダウンロード用の引数つきで呼び出されたときにつけてやれば?
>>742 参考になりました。ありがとうございました。
phpで作成されたxmlを
サーバ側にファイルを保存せずに
ダウンロードさせたかったもので。
>>739 ありがとうございます。
お陰で成功しました。
くだらん質問を聞いてくれてありがとうございます(_ _*)_ _*)
745 :
687 :2005/10/11(火) 21:04:28 ID:???
>>700 ,704
・ローカルに保存されたCookieがあった
・setcookieがtrueを返す
から発行されたのを確認してたんだが、ローカルのCookie消して、ブラウザ再起動してアクセスしたらCookieが発行されなかった。
まだsetcookieの返り値は確認してないんだが、ローカルに保存されてないから多分falseだと思う。
もうちょっと考えてみるわ。
4バイトバイナリを16進数文字列に直して、それをさらに数字に直す時に $four_letters = chr(0x23) . chr(0xb6) . chr(0xa8) . chr(0xc7); $the_number = intval(bin2hex($four_letters), 16); とすると、2の補数表現の関係か整数の0x7FFFFFFF(2147483647)までは普通に変換されるけど、 $four_letters = chr(0xF8) . chr(0xb6) . chr(0xa8) . chr(0xc7); $the_number = intval(bin2hex($four_letters), 16); 0以下(2の補数表現でマイナスの数字)をintvalしようとすると自動的に プラスの値の上限(2147483647)が$the_nuberに入ってしまうんだけど、 簡単に$the_numberにマイナスの数字を入れる方法を教えて下さい。 今は、たまたま-16,777,216(0x80FFFFFF)以下の数字を使わないので、 substr() を使って上位1バイトを条件文(if〜else)にかけてビット反転(~)などを駆使して $four_letters = chr(0xF8) . chr(0xb6) . chr(0xa8) . chr(0xc7); $four_letters_hex = bin2hex($four_letters); if (substr($four_letters_hex, 0, 2) == "ff"){ $four_letters_lestdigit = ~ (intval(substr($four_letters_hex, 2, 6), 16)); $four_letters_not = sprintf("%x", $four_letters_lestdigit); $four_letters_int = -1 * (1 + (intval(substr($four_letters, 2, 6), 16)));} else $four_letters = intval($four_letters_hex, 16); などとしていて、今後上位1バイトがFF以下の数字を変換する必要性が出ても、 それに合わせて条件文や計算を変えてやればいいのだけど、 もしかしたら、もっと1行や2行程度で済む方法があるような気がして・・・・
ゴメン間違えた。 > 今は、たまたま-16,777,216(0x80FFFFFF)以下の数字を使わないので、 間違い)16,777,216(0x80FFFFFF) 今は、たまたま0xFF000000よりマイナスの数字を使わないので、
質問です。 変数が$q1から$q99まであるのですが forを使用して表示したいのですが for($i = 1; $i < 100; $i++){ $q[$i]="$q".$i; echo $q[$i]; } これだとうまくいきません。 配列に変数を格納する事は出来ないのでしょうか? またうまいやり方があれば教えて下さい。
749 :
748 :2005/10/11(火) 22:02:52 ID:p5WBUvB7
上げ忘れました。すいません
>>748 そのまま突っ走りたい場合はマニュアルの「可変変数」を参照。
うまいやり方というか、なんというか、$q1〜$q99のような使い方を最初からしない方がよいかと。
751 :
748 :2005/10/11(火) 22:07:40 ID:???
>>748 この手の質問は繰り返しあるな。。。
750 氏の言う「$q1〜$q99のような使い方を最初からしない方がよいかと」に同意。
とりあえず以下でオケ。
for($i = 1; $i < 100; $i++){
$x = 'q' . $i;
$q[$i] = $$x;
echo $q[$i];
}
ある意味、$q1から$q99まで行く方が遥かに難しい。尊敬しそう。
754 :
748 :2005/10/11(火) 22:18:44 ID:???
>>752 有難うございます。
出来ました。凄く感動してます。
これが出来るといろいろ応用できそうですね。
755 :
752 :2005/10/11(火) 22:29:10 ID:???
>>754 いやいや、これの応用を考えるより今後は
$q1〜$q99 なんかを使用しない方法を考えた方が。。。
756 :
748 :2005/10/11(火) 22:56:40 ID:???
>>755 今回はアンケートを取るのに使用しました。
formの名前を決めていくならこういう方法しか
ないと思っていたのですが、もしかしたら他に
方法ありますでしょうか?
普通に配列つかえばいいじゃん
>>756 <form action="unko.php" method="post" >
<input type="text" name="q[]" /><br />
<input type="text" name="q[]" /><br />
<input type="text" name="q[]" /><br />
<input type="text" name="q[]" /><br />
<input type="submit" name="SEND" />
</form>
//unko.php
<?php
var_dump($_POST[q]);
?>
POSTの順序は保証されないんじゃなかったっけ qにはキーを指定したほうがいいと思う
前から気になってたんだけど、name属性に [ ] を使っていいのかな?
HTML4.01の日本語訳
ttp://www.asahi-net.or.jp/~bd9y-ktu/html4rec_f/cover.html から、
name属性は CDATA
ttp://www.asahi-net.or.jp/~bd9y-ktu/html4rec_f/types.html#type-cdata と辿ることができて、その中に、
「IDやNAMEトークン字句は、文字([A-Za-z])とそれに続くdigits ([0-9])・hyphens ("-")・
underscores ("_")・colons (":")・periods (".")で始まらなければなりません。」とある。
ちょっと誤解を招きそうなので、原文も参照してみると、
「ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed
by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods ("."). 」
なので、最初の文字が[A-Za-z]でその後に [0-9] - _ : . が続く事になるよね。
ここに [ ] は含まれないので、本当は使っちゃまずいんじゃないかと。。。
>>760 実際問題、
現状ほぼ全てのブラウザで使えてるんだから、
イインジャネェノ?
(将来的には知らんが)
inputのname属性はCDATA属性値でしょ?
Yes
>>765 使い方も書いてあると思うが
あと、ここで聞くならそこの掲示板で聞けばいいじゃん
と思うのは俺だけ?
>>112 の拡張で、
>>119-120 >>125 さんのソースを元に
更新参照ファイル ページ名 飛び先URL
../xxx/zzz.log お絵かき掲示板 ../xxx/gazou_bbs.cgi
../../yyy/yyy.dat 質問掲示板
http://yyy.net/bbs/faqbbs.cgi ./www.log お知らせ ./histry.cgi
という感じで、表示する「ページ名」と飛び先のURLを事前設定して、
一番新しく更新されたログを参照し、(ここでは仮に./www.log)
html上で
10/11 <a href="./histry.cgi">お知らせ</a>
みたいにページ名とリンクを自動で貼ってくれるようなものって作れないでしょうか?
作ろうと思う気合いさえあれば作れる
>>746 質問の意図がわからんけど、要は符号付4ビットバイナリを10進数に直したいだけ?
$a=unpack('Nans',chr(0x23) . chr(0xb6) . chr(0xa8) . chr(0xc7)); echo $a['ans'];
599173319
$a=unpack('Nans',chr(0xF8) . chr(0xb6) . chr(0xa8) . chr(0xc7)); echo $a['ans'];
-122246969
検算は(゚听)シテネ
>>760 name属性とNAMEトークンを混同している
CDATAの説明は ID and NAME tokens must begin ・・・の前で終わりだ
>>770 746です。
まじで1行ですね。
ありがとうございます。
↓ココの配布サイト様にある
ttp://www.mt312.com/ ↓PHP4 写メール対応掲示板 IMG-BBS
ttp://www.mt312.com/archives/imgbbs.html の設置について質問です。
ダウンロードしてサーバーにアップ、正常に設置は出来たのですが、
携帯からメール送信して画像をアップ出来るようにする方法がわかりません
config.phpの96行目にある
// 写メール項目
define("POP3_MAIL", "");// 受信メールアドレス yes="
[email protected] " no=""
define("POP3_HOST", "");// 受信ホスト名
define("POP3_USER", "");// 受信ホストユーザ名
define("POP3_PASS", "");// 受信ホストパスワード
の欄に何を設定したらいいのかがマジにわからないのですorz
頭が禿げるほど調べたり試したりしてみたのですが
検索ワードが悪いのか、お手上げ状態です…
たとえば、やほー等フリーのアドレスを取得して
それを受信メールアドレスに設定し、
そのアドレスに画像付きメールを送信すれば
画像掲示板に投稿…出来るようになるのでしょうか。
その場合、受信ホスト名、受信ホストユーザ名、受信ホストパスワード
には何を入れたら良いのでしょうか。
阿呆な質問をしてホントに申し訳ないのですが
どなたかおわかりになる方がいましたら、
何卒ご教授の程宜しくお願い致します。
>>773 配布されたスクリプトについては、配布している奴のところで質問すべき。
775 :
774 :2005/10/12(水) 12:04:54 ID:???
>>773 > 受信ホスト名、受信ホストユーザ名、受信ホストパスワード
はYahooの POPホスト、POPユーザー名、POPユーザーパスワードだな。
>>773 POP3で受信できるメールアカウントが必要だ
OutlookExpress開いてアカウントの設定を見たらわかるよ
>>774 ,775,776,777
速攻でレスありがとうございました。
もう一度配布元のサポートを徹底して調べてみることにします。
779 :
773 :2005/10/12(水) 13:29:05 ID:???
778=773でした。すみません。
780 :
728 :2005/10/12(水) 14:11:30 ID:???
>>734 遅レスすいません。
言われた通りやってみましたが、共にエラーが出てしまいました。
シフトJISやEUCにしたい場合、どう書けばよいでしょうか?
>>780 マニュアル見たら古い関数ですと書かれて引数ものっていないぜ<pdf_set_font
783 :
780 :2005/10/12(水) 15:58:26 ID:xQ56+Qqe
>>781 pdf_set_font($pdf,"Times-Roman",35,"host");だと、エラーは出ないで
出力できるんですが、日本語が化けてしまうんです。一応使う事は出来るみたいです。
pdf_set_font〜の少し上の方に、pdf_findfont($pdf,"Courier","host",0);
としているのですが、これが問題なのかもしれないです。
ここの"Courier"を他の何かに変えたら、もしかしたら動くかも、と考えているところです。
どなたか心当たりは無いでしょうか?
784 :
780 :2005/10/12(水) 16:15:18 ID:???
>>782 たぶんその辺だと思います。
ちょっとこの周辺をいろいろいじってみようと思います。
つーか、Times-Romanてのは半角欧文用フォントじゃねーの?
786 :
nobodyさん :2005/10/12(水) 17:53:26 ID:4hCrpEso
ここはくだらないので、もっとためになるスレはありませんか?
787 :
nobodyさん :2005/10/12(水) 18:01:48 ID:MJ2G+N2s
2ちゃんねる掲示板のCGIどこにあるのれすか?
789 :
nobodyさん :2005/10/12(水) 18:19:15 ID:MJ2G+N2s
なぜゆえに?
>>789 書き込みのスクリプトはPerlだが読み込みはC。
791 :
nobodyさん :2005/10/12(水) 18:31:14 ID:MJ2G+N2s
>>791 そうなんですか
分かりました
失礼します。
>>741 に書き込んだものですが、phpで作成されたxml(html)をダウンロード
させたいのですが、writer.phpというソースをダウンする事はできるのですが、
writer.phpが作成するxmlをダウンさせる方法がわかりません。
phpが作成するhtmlやxmlをダウンロードさせる方法をお願いします。
<?php
$outputname="writer.php";
header("Content-Type: text/xml");
header("Content-Disposition: attachment; filename=$outputname");
@readfile("writer.php");
?>
793 :
nobodyさん :2005/10/12(水) 18:47:05 ID:MJ2G+N2s
ミスった
>>791 じゃなく
>>790 だった
てなわけで
も一つくだらない質問します
>>790 いるなら書いてくらさい
だったらHTMLで掲示板作れないんですか
HTMLで作れるなら作れば(テラワロス 藻前にはPC自体まだまだ早いぉ
2chは板表紙とスレ一覧が静的だからHTMLと思ったのでは?
796 :
掲示板を楽しむ者 :2005/10/12(水) 18:56:48 ID:MJ2G+N2s
>>794 もういいです
もうCGI持ってますから
面白い回答ありがとうございました<笑>
>>792 742のようにすれば出来たけど。
<?php
$outputname="hoge.xml";
header("Content-Type: text/xml");
header("Content-Disposition: attachment; filename=$outputname");
$dom = new DOMDocument;
$dom->encoding = "UTF-8";
echo $dom->saveXML();
?>
>>793 790じゃないがそこらへんに落ちてるBBS使えば?
>>797 これを実行すると確かにxmlファイルをダウンできましたが、
中身が殻でした。
writer.phpを実行するとxml形式のrssが表示されるのですが、
それをダウンロードさせたいのです。
>>793 writer.phpに
$outputname="writer.php";
header("Content-Disposition: attachment; filename=$outputname");
をつけるとどうなる?
×@readfile("writer.php"); ○ require('writer.php');
こう、僕の心を癒してくれるような書き方は無いでしょうか? どうもコードを見ると吐き気がするんです。
>>806 ここはコードを書く際に生じた疑問を聞く場所であって
CGIを作って欲しいという「依頼」はスレ違いだから去れ
このスレに質問に来るような奴が暇潰しに書いてみた。動作未チェック、エロイ人添削お願い。 <?php define('CONFIG_FILE', 'config.csv'); $fp = fopen(CONFIG_FILE, "r"); while ($conf = fgetcsv($fp, 1024)) { $filemtime = filemtime($conf[0]); if ($filemtime > $latest_time) { $latest_time = $filemtime; $msg = conf[1]; $url = conf[2]; } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title></title> </head> <body> <?php echo date('n/d',$latest_time); echo '<a href="' . $url . '>' . $msg . '</a>'; ?> </body> </html>
コード的には$latest_timeが初期化されてないのと、 データがない場合が想定されてないのとconfの頭に$がない 以外はいいんでないの 動作的には遅そうだけど環境がシビアじゃない or CSVファイルが 小さいならこれでおkという印象 あと、これ echo '<a href="' . $url . '>' . $msg . '</a>'; は echo "<a href=\"$url\">$msg</a>"; のほうが速いらしいね エスケープが嫌だから俺は異端のヒアドキュメント派だけど 最後に。 動作チェックしろよ
出力データはロジックパートで作ってしまって、 HTMLに埋め込むのはecho文だけにしたほうが
ちょいとお聞きします。 サーバOSはWin2kでサーバはapache使ってます。 で、特定のメンバーにBcc使ってメールを送るもの作ってます。 今はimap_mail関数を使っているのですが処理がものすごく遅いです。 (送信相手は2人で最大でも16人) mailを送る関数でBccを使い複数のメンバーにメールを送る場合、 どれが一番処理が早いでしょうか?
>>810 うわ・・凡ミス連発してた。動作チェックはするべきだね・・・。
>>811 次からそうしますね。
ラジオボタンを利用した3択のクイズで10秒たてば どのラジオボタンを押しても”0”という値を他のPHPに送り 10秒以内ならそれぞれのラジオボタンに入れてある数値を送る という処理をするのにはどうしたらよいでしょうか? データを送るなどは出来ますが時間制限を設けるとなると分からないので 今回質問しました。 宜しくお願いします
816 :
軟式PHP :2005/10/13(木) 10:14:39 ID:???
>>815 セッションにクイズ開始時間を保持させておいて、ラジオボタンの
値はとりあえずそのまま送信させる。
送信後ページで現在の時刻とクイズ開始時間を比較させて10秒以上だったらラジオボタンの値を0にするってのは?
厳密にやらないならJavaScriptで時間制限(timer)・自動送信(location)・ラジオボタンの値(form.elements.value=値)の変更も全部出来る。
>>815 板違い
サーバーサイドの処理とクライアントサイド処理の違いを認識すべし
漏れならJavascriptを使う
つか、ラジオボタンで3択にすると2回クリックする必要があるので、
それで時間制限アリってのは不親切では?
818 :
815 :2005/10/13(木) 10:53:39 ID:???
>>816 さん
返信どうもです その方法で作ってみますね
ありがとうございました
>>817 さん
JavaScriptですかぁ Javaの方はいまいち分からないので
816さんの方法で作ってみます
あと板違いすみませんでした・・・
JavaとJavaScriptは別物だと何度言えば(ry
820 :
815 :2005/10/13(木) 11:56:32 ID:???
セッションについてネットで調べたりしてみましたが出来ませんでした 時間をセッションに入れるには session_start(); session_register("jikan"); $jikan= date("s"); この様なphpであっているのでしょうか?(エラーが出るので違うと思いますが・・・ それとクイズの問題表示と問題開始時間が決められるのがphp1として クイズが合っているのか判定するphpをphp2としております php1からphp2へ,問題開始時間のセッションの値を渡すのも出来ませんでした。 あと時間をifで比べるということもいまいち分かりませんでした、 if( 開始時間+10 > $date_s = date("s")){ 答えの値を0 { この様なif文で出来るのでしょうか?開始時間に+10と書いて+されるのか心配です データがうまく渡っていなかったので試すことが出来なかったのでお聞きしました。 1.セッションにクイズ開始時間の保存の仕方 2.違うphpにクイズ開始時間の値の渡し方 3.時間を比べて10秒以内だったら答えの値を0にする判定文 以上を教えていただければ非常に助かります 質問も多くて申し訳ないですが 宜しくお願いいたします。
821 :
nobodyさん :2005/10/13(木) 11:59:38 ID:geTy/+mk
>>806 C-BOARDとそのオマケにあるだろ。ちゃんと探せや。
>>820 1と2
セッション使わなくても
ページ内にhiddenで埋めて回答と一緒に返せばよいと思う。
そんなに神経使わなくて良い物でしょ?
3
現在時間から開始時間を引いた値が10以上とする方が楽。
>>820 --- php1.php ---
<?php
session_start();
$_SESSION['jikan'] = time();
$fjikan = date('Y/m/d H:i:s', $_SESSION['jikan']);
echo <<<EOD
<html>
<body>
開始時間:{$fjikan}
<form action="php2.php" method="post">
<input type="radio" name="answer" value="1">テスト1
<input type="radio" name="answer" value="2">テスト2
<input type="radio" name="answer" value="3">テスト3
<br><input type="submit" value="送信">
</form>
</body>
</html>
EOD;
?>
824 :
823 :2005/10/13(木) 12:20:06 ID:???
続き --- php2.php --- <?php session_start(); $start = $_SESSION['jikan']; $jikan = time(); $fstart = date('Y/m/d H:i:s', $start); $fjikan = date('Y/m/d H:i:s', $jikan); $diff = $jikan - $start; $answer = $_POST['answer']; if ($diff >= 10) $answer = 0; echo <<<EOD <html> <body> 開始時間:{$fstart}<br> 現在時間:{$fjikan}<br> 差:{$diff}秒<br> 答え:{$answer} </form> </body> </html> EOD; ?>
825 :
823 :2005/10/13(木) 12:24:10 ID:???
>>824 php2.phpの</form>を消し忘れた。。。
827 :
nobodyさん :2005/10/13(木) 13:10:44 ID:G6+P+YYd
PHPで、文字列にMigemoのような検索をする方法ってありますか? 最悪、対象はひらがなやカタカナだけでもかまわないんですが。
自分で、ローマ字列から正規表現を生成するやつを実装しては? (オープンソースだし、コード読んで移植するのも可)
829 :
sage :2005/10/13(木) 14:12:02 ID:I2B+Ardh
なにぶん初心者なので、言葉足らずになるかもしれませんが、教えてください。 PHPで、PSQLデータ内の行の1つを取り出すための言語。 (例、ID・001 name・PC value・300と言うデータの中の300だけを取り出す) どういう言語なのか、それと使い方も教えてもらえればうれしいです。 言葉足らずでしたら、すいません。
830 :
815 :2005/10/13(木) 14:12:55 ID:???
>>822 さん
貴重な意見ありがとうございます
>>現在時間から開始時間を引いた値が10以上とする方が楽。
確かにそのとうりです 勉強になりますありがとうございました。
>>823 さん
ソースまで記入してくださり大変感謝です。
やってみたところ無事に秒数を取ることが出来ました。
しかし問題が一つあります
経過時間などもちゃんと表示されて値も渡っているのですが
警告がでてしまいます、以下に記入しています
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\Apache Group\Apache2\htdocs\kuizu\toi2.php:2)
in C:\Program Files\Apache Group\Apache2\htdocs\kuizu\toi2.php on line 3
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\Apache Group\Apache2\htdocs\kuizu\toi2.php:2)
in C:\Program Files\Apache Group\Apache2\htdocs\kuizu\toi2.php on line 3
このエラー文を検索してみると結構有名らしく色々出てきました、
php.iniをサイトに書いてある通りにいじったりしましたが
無理でした。 こちらでも現在エラーの原因を探している最中です
もし分かる方がいらっしゃれば教えていただきたいです。
831 :
軟式PHP :2005/10/13(木) 14:13:20 ID:???
初心者すぎるだろwww
832 :
軟式PHP :2005/10/13(木) 14:14:55 ID:???
アレ。
>>831 は
>>829 に対してね。
>>830 はsession_startをコードの一番初めに書いていない(何か出力した後にsessionをスタートさせている)んじゃないかな。
833 :
815 :2005/10/13(木) 14:24:25 ID:???
>>832 さん
>>session_startをコードの一番初めに書いていない(何か出力した後にsessionをスタートさせている)んじゃないかな。
はい 私もネットで調べてそれは初めに見てみたのですが コードの一番上に記入しておりますので
その事でエラーが出ているという事は無いですね
ちなみにエラー箇所であるtoi2.php on line 3 は
>>823 さんのコード通りです
間違いなく先頭から書かれているならsession_start()がある2行目でエラーが出るはずだが・・・ 改行があるか、「--- php2.php ---」までコピペしているに1票
835 :
815 :2005/10/13(木) 14:31:08 ID:???
すみません 自己解決いたしました みなさんこんな超初心者にやさしく回答していただき 本当にありがとうございました。 いつか答える側になれるように勉強がんばります
836 :
815 :2005/10/13(木) 14:34:32 ID:???
834さんの言う通りでした・・ 改行がありました 改行もダメとは夢にも思っておりませんでした お答えいただきありがとうございました
改行もダメなんだっけ?
<? が始まる前に改行があったらダメ。 改行文字(1byte〜2byte)が本文として出力される(=本文を出力したのでヘッダ送信も終了した事になる。)
839 :
823 :2005/10/13(木) 14:52:54 ID:???
>>835-836 動いて良かったね。サンプルなんで省略してるけど
$answer = $_POST['answer'];
辺りのコードは、本来はサニタイズする必要がある($answer をどう扱うかにもよるが)。
サニタイズとは?とか、どうすれば?とかは、まったりと勉強してくだされ。
そのまま使用することはないだろうし、勉強中の習作だと思うけど、念のため。
>>812 imap_mail()でもWinは直接SMTPで送るみたいだから、mail()と多分いっしょ。
リモートのSMTPサーバを利用しているのなら、ローカルにMTAをたてて、
そこにキューを溜めるようにすれば多分速くなる。
ローカルにあるMTAで遅い場合、それはPHPの問題じゃないね。
なぜPHP-usersに送ったら 確実にヲチスレで嘲笑されるようなくだらねぇ質問が, このスレでは普通に回答されるのはどうして?
Formに入力した値を保存ボタンを押すことによってtest.txtに出力しDLが始まるようにしたいのですがなかなかうまくいきません。 test.txtに出力するのと保存を両方処理させるのに困ってます。 どうかご教授くださいお願い致します。
残念でした 「うまくいきません」はNGワードです
>>842 まるまる答えを書くのは簡単なんだが、どう上手くいかないか書いた方が暇ネタとして
相手してもらえると思うけど…
まずは
入力値をtest.txtに保存する処理
text.txtをダウンロードさせる処理
の2つに処理を分けて、それぞれがキッチリと動くことを念頭においてやってみたら?
>>829 PSQLっていう名前のデータベースまたはデータストレージ製品つうのが思い浮かばない。
PostgreSQLにpsqlっていうツールはあるけど。
まあPSQLというぐらいだから、SQL(問い合わせ言語)が使えるんじゃないの。
SQLにも細かいところで差異はあるけど、標準的な仕様に合わせるように極力してる筈
だから、一般的なSQLについて調べると良いよ。初心者向けの本も沢山出てる。
例の場合、「SELECT value FROM テーブル WHERE ID='001' AND name='PC'」とか。
普通IDはユニークな値とするものだから、AND以降は不要かもね。
>>841 ・下らねぇ質問スレだから
・暇な人が居るから
×暇 ○物好き
そうとも言う
PHP-usersには、他人をバカにすることでしか自尊心を保てないような器の小さな人間が多いから。 このスレには、つまらない知識の独占なんてバカバカしいと思ってる度量の広い人間が多いから。
正直,ただのひつまぶしだけどな
くだ質だから これに尽きる
853 :
nobodyさん :2005/10/14(金) 13:22:00 ID:hq2CEuCn
include関数は負荷は高め?
854 :
sage :2005/10/14(金) 13:22:54 ID:/+ebJ9UK
841さん851さん、ありがとうございます。 くだらなさすぎて、スルーされるかと思いました。 参考書も買ったのですが、少し理解力に欠けまして・・・ もう少しがんばってきます。
テキストファイルで 佐藤 佐藤 鈴木 佐藤 田中 佐藤 田中 と言う感じで書かれている中から同じ名前が3つ以上ある者を 変数に持ってくるにはどうすればいいんでしょうか? ほんと初心者ですいません・・・
>>855 1) file でテキストファイルを読み込んで配列に展開
2) array_count_values で 1) の配列を元に配列データと出現回数の連想配列を作成
3) 2) の連想配列から出現回数 >=3 をチョイス
>>856 すいません、小一時間悩んだんですが出来ませんで、
3) 2) の連想配列から出現回数 >=3 をチョイス
の所を簡単に書いていただけないでしょうか?
つ [ foreach if ]
859 :
856 :2005/10/14(金) 16:16:18 ID:???
>>857 う〜ん、余計なお世話かもしれんが…
1)、 2) はまるまる答えを書いているようなもので、唯一 3) が
ロジック(と言うほどのものでもないけど)を考えるところだから、
ここを丸投げしなければならないのはプログラムを作る人としてはつらいかも。
3 回以上出現する名前が複数存在する場合を考慮して配列($achoices)に
格納した例が以下。絶対に複数存在しないのであれば、普通の変数でもいい。
<?php
$alines = file('test.txt');
$anames_counts = array_count_values($alines);
$achoices = array();
foreach ($anames_counts as $name => $count) {
if ($count >= 3) {
// echo "$name<br>"; //debug
$achoices[] = $name;
}
}
print_r($achoices);
?>
ファイルが小さいなら 名前でソートしてforeach 3連続ヒットでピックアップ でかいならwhileで一行ずつ読み if (isset($count[$name])) $count[$name]++; else $count[$name]=1; のように集計 もしくはDBに突っ込んで SELECT name, COUNT(name) AS num FROM test GROUP BY name HAVING COUNT(name) > 2;
ちょっとワロタ
863 :
855 :2005/10/14(金) 16:56:17 ID:???
皆さんどうもすいませんです。
一応配列にはしなかったんですが
>>859 と同じようにしたつもりなんですが
出力されませんでした。
で、
>>859 をコピーさせて頂いたんですがやはり出力しません・・・
$anames_counts = array_count_values($alines);
print_r($anames_counts);
だとちゃんと出てくるので何だかよく分からなくなってしまいました。(@_@;)
ご迷惑かけて申し訳ありませんです。
>>863 おそらくテキストファイルの方がおかしいんじゃない?
ちゃんと1行に1つの名前にしてる?
ファイルのパス間違えてない?
865 :
855 :2005/10/14(金) 17:17:07 ID:???
>>864 新しくtest.txtで打ち直してやってみたんですが、
$anames_counts = array_count_values($alines);
print_r($anames_counts);
だと
Array ( [佐藤 ] => 4 [加藤 ] => 1 [山田 ] => 1 [飯田] => 1 )
で出るんですが、foreachの処理を入れるとやっぱり空白になっちゃいます
>>865 var_dump($achoices);
すると何てでる?
タイポだろ
いや、ifの前の空白のほうが目があるか
あー原因分かった。 そのままコピペしたんだろ?全角スペースが入っちゃってるでしょ。 全角スペースを消せばOKだ
>>868 それかと思ったがエラーが出るとは言わずに空白になるって言ってるからな。
>>870 コンソールじゃないんでしょ
んでerror_reporting(0)という
試してみた.全角混じってると parse error 出るね. それ直したらちゃんと動いたよ.当たり前だけどww
fgets()でファイル全体を舐めずに途中にある一行だけを読む事は 可能でしょうか?
行の位置が分かればfseek()で可能
875 :
855 :2005/10/14(金) 17:41:48 ID:???
>>868-872 えー、全くお察しの通りでこちらでも動きました。
本当にご迷惑おかけしましたm(_ _)m
ご親切にしてくれた方、有難うございました。
JpGraphの日本語化について質問です。
http://www.asial.co.jp/products/jpgraph/japanese.phpを参考に変更もしました 。
フォントを呼び出すにはどうすればよいのでしょうか?当然ながら$graph->title->SetFont(FF_PMINCHO);ではなりませんでした。
<?php
require_once("jpgraph/jpgraph.php");
require_once("jpgraph/jpgraph_bar.php");
$objGrh = new Graph(450,250,"auto");
$objGrh->SetScale("textlin");
$objGrh->title->Set("bbb");
$objGrh->xaxis->title->Set("ccc");
$objGrh->xaxis->title->Set("テスト");
$data=array(array(500,100),array(400,200));
$objPlot[]=new BarPlot($data[0]);
$objPlot[]=new BarPlot($data[1]);
$objPlot[0]->SetLegend('AAA');
$objPlot[1]->SetLegend('BBB');
$objPlot[0]->SetFillColor('
[email protected] ');
$objPlot[1]->SetFillColor('
[email protected] ');
$objGbp=new GroupBarPlot($objPlot);
$objGbp->SetWidth(0.80);
$objGrh->Add($objGbp);
$objGrh->Stroke();
?>
877 :
876 :2005/10/14(金) 18:40:29 ID:???
現在、9行目にだけテストと入れていますが 他のアルファベットの部分を日本語にしたいのです。 上の構文でもグラフは出力できますが、日本語の部分は文字化けしています。
スクリプトのエンコーディングが何か書いてないけど、 当然ながら jpgraphに渡される文字列がUTF-8になっていますよね?
テキストファイルなんかに書き込むときに ファイルの最初にどんどん挿入していく方法ってありますか? たとえば 1 2 3 とあったときに4を一番上の行に追加して 4 1 2 3 としたいのですが。
ボケちゃったおじいちゃんカモシレナイよ
>>881 ワロスwwww
同じじゃねーかwwww
日本語理解できねんだろ
質問した俺もワロスww
よく読んだらちょっと違う。 俺の場合はDB使わずに、普通にファイル読み込んで、先頭の行に挿入するという方法が知りたいのです。 正規表現で ^ でリプレイスするというような方法しかないですか?
正規表現で置換とかどっから仕入れたネタですか
888 :
nobodyさん :2005/10/14(金) 21:39:17 ID:87Z0VpJT
ファイル削除について質問なのですが、このようにワイルドカードを使って 同名で別の拡張子のファイルを消す良い方法はあるんでしょうか? ちなみにこれ↓ではダメでした…。 $del_file_name='/usr/local/apache/htdocs/img/'."img_001".'.'."***"; unlink( $del_file_name );
>>888 ライブラリ使わないとなると、globとかでリスト作って一個ずつ消すしかなさそう
``でシェル呼べばそれで終わりだけどね
>>888 マニュアルに参考になるサンプルって結構あるよね。
unlink
To delete files using wildcards:
<?
function delfile($str)
{
foreach(glob($str) as $fn) {
unlink($fn);
}
}
?>
>>886 殆どのファイルシステムでファイルの書き込みは
良くてデータの追記ができるぐらいで、データ全体の置換が普通。
ギャップを用意するとか分割するとか出来るけど データ構造がわからんと何とも言えん。言えることは「DB使え」のみ
>>886 そんなアルゴリズムは捨てちまえ。
追加は、ファイルのけつにするもんだ。
頭が尻みたいな形の奴もいるけどな
>>886 追加は末尾にして,使うときに並べ替えるとか
input.phpの内容が↓な感じで <FORM action="input.php"> <INPUT type="text" name="data1"> <INPUT type="text" name="data2"> <INPUT type="text" name="data3"> : input.php の中で data1〜n に入力ミスがないか調べた上で、 data1〜n に入力されたデータを output.php に送りたいのですが、 これは一体どうやれば良いのでしょうか? header("Location:")を使うと値は渡せませんし…。 入力ミスがあった時は「エラー!! **個目のデータを入力し直して下さい」と表示し、 入力ミスがない場合は次のステップへ進む、という処理をしたいのです。
色色方法はあるが、とりあえずこの機会にセッション覚えたら
>>898 解答ありがとうございます。
セッション変数にそんなに多量の情報をブチ込んでも大丈夫なんですか?
ログインの過程でセッションを触ったので、セッション変数でのやり方なら分かるんですが、
何かスマートでない感じがして…。
>セッション変数にそんなに多量の情報をブチ込んでも大丈夫なんですか 具体的に
901 :
876 :2005/10/14(金) 23:42:44 ID:???
>>878 エンコーディングってファイルとして保存するときに設定するやつのことですか?
それなら、EUCと改行はLFにしています。
訳の分からないことを言っていたら、教えて頂けたらありがたいです。
<INPUT type="text" name="data1"> <INPUT type="text" name="data2"> <INPUT type="text" name="data3"> : と書きましたがこれが結構あるんです。最大で50個程度。
>>902 それがセッションにどういう問題を引き起こすのかってこと
表示部分を各phpファイルから独立させて、フラグ(ここでは入力チェックの合否)に応じて、
表示に使うファイルをincludeなりrequireなりするとややこしくならなくてよいような。
>>901 jpgraphに渡す文字列はUTF-8にしてあげてください。
>>903 と言う事はセッション変数に多量の情報を入れても大丈夫なのですね。
ありがとうございました。
>>905 それは実装次第だから分からんし保証もでけん
やはりこれを機にSession覚えたほうがよさそうだよ
>>904 これどっちが主流なんだろ
エントリポイント一つの方が作りやすいけど
フォワードするケース多いよね
ファイルの先頭に挿入する方法が現実的ではないらしいので、 ファイルの後ろに足して、あとから後ろから数行だけ読み込むって処理はできますか? feofなんかで回して止まった時点の直近の配列数個とかいう手段以外でもっとスマートなやり方が あればいいんですが、どうなんでしょうか。
>>908 自分が作ったファイルだけ相手にするんだったら一行の文字数を固定すると色々楽
>>908 >>874 とか。ファイルの操作ならtailやtocを参考にしてみては
質問自体はFAQだけど、データ構造しだいだから解答しようがない
スマートにやりたいならスマートなアルゴリズムで扱える構造に設計するしかないよ
×toc ○tac
>>910 そりゃそうだ
データが分かってりゃもう出来たようなものじゃん
>>908 改行なんてものは単なる文字の1つなんよ。
言ってしまえば、aとかbとか他の文字とおんなじ扱いなので、
行を単位にして(その部分だけに)アクセスしたり編集(挿入・削除・追加 etc)する方法は無いんよ。
どうしてもやりたきゃプログラムを書く人が自分でやれってな感じ。
判りやすい説明だ。
915 :
nobodyさん :2005/10/15(土) 01:51:20 ID:lw7SpU92
書くときは末尾に追加して読むときは配列に読み込んで反対にすりゃいい
916 :
876 :2005/10/15(土) 02:41:12 ID:???
>>904 UTF−8で渡すとは、つまり、
>>876 を保存するときにUTF−8とLFで
保存すれば良いのでしょうか?それでしたら、もうやってみたのですが普通に文字化けしているのです。
904は $objGrh->xaxis->title->Set(mb_convert_encoding("テスト", "UTF-8", "auto")); ということをいいたいんじゃまいか?
もりあがっていこうよ!!
919 :
876 :2005/10/15(土) 03:09:54 ID:???
>>917 ご支援ありがとう。
$objGrh->xaxis->title->Set("テスト");の行の下に足してみました。
その後、上の行を消し代わりに入れてみました。
ですが、文字化けには全く変化がありませんでした。
SetFontした? $objGrh->title->Set("bbb"); $objGrh->xaxis->title->Set("ccc"); $objGrh->yaxis->title->Set(mb_convert_encoding("テスト", "UTF-8", "auto")); $objGrh->yaxis->title->SetFont(FF_GOTHIC, FS_NORMAL, 16); xaxisのタイトルに2回Setしてるけど?
というか、876よく見たら >フォントを呼び出すにはどうすればよいのでしょうか?当然ながら >$graph->title->SetFont(FF_PMINCHO);ではなりませんでした。 これ $graph->title->xaxis->SetFont(FF_PMINCHO); じゃないの?
↑ごめん、間違えた $graph->xaxis->title->SetFont(FF_PMINCHO);
923 :
876 :2005/10/15(土) 03:44:59 ID:???
>>920 していませんでした。先ほどの書き込みに習い8行目以降をそのまま
コピペしてみましたが、やはりなりませんでした。
設定ミスなど、どこか根本的なエラーがあるのでしょうか?
924 :
876 :2005/10/15(土) 03:50:02 ID:???
926 :
nobodyさん :2005/10/15(土) 04:42:07 ID:8GPgJI8N
PHP4.4.0でも使用できるアクセレーターってありますか? eアクセレーターはちゃんと動かないし、Zend Optimizerは未対応といわれて、動作しませんorz
>>908 1レコード1ファイルで連番付けて保存しとけば?
所詮テキストファイルで管理できる程度のレコード数なら無問題
とあるサンプルコードに function hoge ($params, &$result) { ・・・ } という記述がありました。 この &$result についている & の意味(効能)を教えてください。
マニュアルに書いてある
>>928 ドキュメントを読むか、簡単なプログラムを書いて自分で確認する癖を付けた方が良かっぺ。
<?php
function hoge ($params, &$result) {
$params = '1'; $result = '2';
}
$workparams = 'A'; $workresult = 'B';
hoge($workparams, $workresult);
echo "workparams = $workparams<BR>";
echo "workresult = $workresult<BR>";
?>
もし管理人が死んだ場合、サイトにその旨を表示させるにはどうすればいいですか? どこを監視すれば管理人の生死について出来るだけ正確な判定できると思いますか?
933 :
926 :2005/10/16(日) 06:42:28 ID:???
自己解決しました。 4.4.0に合うアクセレーターは見つからなかったので、4.3.11のportsを拾って再構築してeAcceleratorを入れました。
935 :
nobodyさん :2005/10/16(日) 07:01:48 ID:J/3a2VXK
1カ月くらい更新してなかったら死亡用ファイルを更新なり読み込みなりすりゃいいんじゃないの。
一番確実なのは市役所の住記情報だな アクセスできるかどうかはわかんないけど
ミケネコさんを 思い出しちゃった…合掌
938 :
nobodyさん :2005/10/16(日) 11:43:02 ID:RSZhtmwP
PHPくだスレにVIPPERが多い件について
940 :
nobodyさん :2005/10/16(日) 15:01:33 ID:4AFyuy0O
test.php?query=aaa の形ではなくて test.php?aaa のようなクエリーを受け取る方法を教えてください 変数はどんなんになるんでしょうか
>>940 ネタなら面白くない。
マジレスするなら$_SERVER['QUERY_STRING']
>>941 $_GETじゃないんですね
ありがとうございました
補足というか蛇足かもしれないけど, PATH_INFOやmod_rewriteについてもそのうち調べてみれば? test.php?aaa の ? なしにデータを受け取れるようになるよ.
>>943 こういうのがあるんですね、知らなかったです。
ちょっと検討してみます。
ありがとうございました。
>>943 PATH_INFO、俺だけかもしれんがちょっと使いづらい。
946 :
nobodyさん :2005/10/16(日) 16:22:25 ID:2l1eRJuS
教えてください。 perlでa〜zを配列に入れるばあい下記のようにすると思いますが @a=('a'..'z'); phpではこのようなことできないのでしょか? $a=array('a'..'z'); ってだめなのですが、他にやり方あるのでしょか?
きれいな感じなのはないんじゃない。forで回したりするくらいかね。
ここでトリッキーなコード登場 ↓
$a = array(); for($i = ord('a'); $i <= ord('z'); $i++) { $a[] = chr($i); } var_dump($a); C言語風だけどこれしかないんじゃないかな・・・ やったことないからしらねww
$s='abcdefghijklmnopqrstuvwxyz'; これを上手く使えんかな
特にトリッキーでもなかったので再挑戦↓
952 :
946 :2005/10/16(日) 16:52:24 ID:???
>>947-950 皆さんありがとう!
ごめんなさい自己解決してしまいました。
なんか
$a=range('a','z');
で行くみたいです。
元質問者が一番スマートな回答をした件について
>>952 あれ,既にあったのか.
さすがPHPだなー,なんでも関数になってる.
PHP関数の全体なんて把握できねぇよヽ(`Д´)ノウワァァァン
ファイルのアップロードフォームで、ファイルサイズが大きい場合、 ブラウザが読み込み中になるのですが、その間に「処理中」という風に 別のメッセージを出す事って可能なのでしょうか? サーバでの処理が長い場合は、別メッセージを出す事は可能なのですが クライアント->サーバ間の処理が長い場合はどうすれば…?
959 :
949 :2005/10/16(日) 18:27:52 ID:???
>>958 だって,車輪探すより作った方がはえーよwww
・・・マニュアルでも眺めるとするか
>>957 PHP-users ML の過去ログ検索で探すと
それ関連の話がいっぱいでてくるかもしれない.
961 :
957 :2005/10/16(日) 19:03:24 ID:???
>>960 PHP-usersの過去ログ検索は一通りしたのですが、クライアント側からデータを
サーバに受け渡すのに時間がかかる場合のものは見つかりませんでした。
サーバでの処理に時間がかかる場合にメッセージを表示させたりというのはあった
のですが。
フォームからsubmitするときに、2つのプロセスを立ち上げて片方は「アップロード中」
というメッセージを表示して、もう一つのプロセスでファイルアップロード自体を
扱うという事が出来れば良いのですが…。
962 :
nobodyさん :2005/10/16(日) 19:36:30 ID:PiJRyBSb
PHPに関する資格ってありますか?
ないんじゃないの
964 :
nobodyさん :2005/10/16(日) 19:39:34 ID:PiJRyBSb
やっぱりそうですか なんか資格とればっていわれたので
あるけど、取るほどの資格じゃないでしょ。 それにメジャーじゃないし。
自分は普段PHPがよくわからなかったのでCGIを全てperlですましていたのですが、 この度アクセスログを取ることにしたのですが、負荷の問題を考え、PHPを使おうと思いいろいろみて調べ、 PHPのタグをトップページに埋め込もうと思いました。 しかし、環境変数の取得方法がわかりません… もしよろしければ、来訪者の環境変数を、丸ごとでよいのでそのままdatファイルに吐いていくコードを教えていただけないでしょうか…?シンプルなものでよいので よろしくお願いしますm(_ _)m
968 :
nobodyさん :2005/10/16(日) 20:03:08 ID:6lmrKTje
>>967 <?php
print_r $_SERVER;
?>
>>967 perlやってりゃ少しググれば組めそうなものだが
>>967 は質問内容から、何も判っていないのでは?と思われる。
・PHPがよくわからなかったのでCGIを全てperlですましていた
・負荷の問題を考え、PHPを使おうと思い
・PHPのタグをトップページに埋め込もうと思い
・シンプルなものでよいので
あたりからプンプン臭ってくる。
学校の宿題なら自分でやろうな. それか分からないところを整理してから質問してくれないと.
$s[index]てな使い方を言いたかったんじゃないかな。 まぁ、range()使うのが素直なやり方だけど。 $s='abcdefghijklmnopqrstuvwxyz'; for($i=0;$i<strlen($s); $i++) echo $s[$i]."<br>";
$s='abcdefghijklmnullpoqrstuvwxyz';
>>976 $s='abcdefghijklmnoprsgaxtuwvyz';
$s='abcdefghijklmgaxtuqrstuvwxyz';
学校の宿題でPHPなんてありえるの? そらすげーな。
>>961 JavaScriptで出せばいいんじゃないの?
古くて簡単な方法なら別窓やiframeをうまく使ってsubmitと切り分ければいいし。
Ajaxを使う手もある。
Ajaxなら「何%完了」とか「予想時間」とかもがんばれば出せるのでは?
あ、アップロード中の一時ファイルの場所を別アクセスのプロセスから特定できないと無理か・・・
981 :
957 :
2005/10/17(月) 04:28:17 ID:??? >>980 結局、JavaScriptでやりました。別ウインドウを開いて、親ウインドウを監視してって感じで。
どんなやり方にしろ、ファイルのアップロードプロセスを監視する仕組みを入れないと細かい
動作は難しいみたいですね。
Apacheのモジュールに組み込めば実現可能なのかな?