【PHP】質問スレッドpart19【php】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/07/16 07:12ID:KvHeypq/・新規質問の方は上げてください。age進行でお願いします。
・質問する際には環境も明記。
・正しい日本語で分かりやすく。
・レスがつかないからって逆切れする厨お断り。
・解決しなくてもこたえてもらったら礼を。
■本家
http://www.php.net/
■日本 PHP ユーザ会
http://www.php.gr.jp/
■PHP マニュアル
http://www.php.net/manual/ja/
■PEAR マニュアル
http://pear.php.net/manual/ja/
過去スレ, 関連スレ等>>2-4
抜けているものがあったら補足願います
0578nobodyさん
04/07/31 21:10ID:???0579nobodyさん
04/07/31 21:21ID:???0581nobodyさん
04/07/31 23:19ID:WRy9c9NNif文は不安な時は、()でくくるのが吉。
if ( ( $name01!="" ) && ( $name02!="" ) )
みたいに
0582nobodyさん
04/07/31 23:24ID:???0583nobodyさん
04/08/01 00:23ID:???0584nobodyさん
04/08/01 00:25ID:???わかりにくいと思いますので詳しく
自分が何というファイル名かわからないとき
自分のファイル名を取得したい
0585nobodyさん
04/08/01 00:30ID:???ttp://www.php.net/manual/ja/reserved.variables.php#reserved.variables.server
0587nobodyさん
04/08/01 01:10ID:???http://www.ii-park.net/~goldred/ero-box/001.jpg
http://www.ii-park.net/~goldred/ero-box/002.jpg
http://www.ii-park.net/~goldred/ero-box/003.jpg
0588nobodyさん
04/08/01 01:11ID:???0589nobodyさん
04/08/01 01:38ID:???PHPをコマンドライン側で実行する場合、$_SERVERの代用として
なんという変数を使えばいいんですか?
ついでにageさせてください。
0590nobodyさん
04/08/01 01:55ID:???0591589
04/08/01 01:56ID:???$_SERVER -> $_SERVER['PHP_SELF'] です。
本当にすみません。。
0592nobodyさん
04/08/01 02:03ID:???うちはApache2+PHP4.3xなんだけど、使ってて動作おかしいとかない?
0594nobodyさん
04/08/01 03:10ID:???動作エラーを詳しく言えばいいのかな?
「Notice: Undefined variable: input_len文字までです。 in /www/xxx/yyy.php on line 498」
っていうエラーが出てきて、その行は
「show_error_msg("コメントは$input_len文字までです。");」
ってなってる。
コンパイラが「input_len文字までです。」を1つの変数と誤認識したんじゃないかと疑ってるのだが。
こんなの出るようなら評判悪いかなぁと思って、動作おかしいとかないか聞いてみた
0595nobodyさん
04/08/01 03:14ID:???PHPAもZend Optimizerもプログラムの作りによっては、
動作おかしいというか、落ちることがあるよ。
完全に互換性がある訳じゃない。
使う場合はちゃんとテストした方が良いよ。
0596nobodyさん
04/08/01 04:50ID:???$data_file = "./$chat/log.cgi";にしているのですが
$chat がどうしても空白になります。
なぜでしょうか?
0597596
04/08/01 04:53ID:???$data_file = "./$chat/log.cgi";
にすれば「mattari」と表示されました・・・
0598nobodyさん
04/08/01 05:16ID:???$foo = /{$_GET['chat']}/log.cgi
にしる。
register_variablesをOffにした方がいいぞ
0599598
04/08/01 05:17ID:???0601nobodyさん
04/08/01 06:03ID:???0602nobodyさん
04/08/01 07:17ID:???0603nobodyさん
04/08/01 07:34ID:???0604nobodyさん
04/08/01 08:35ID:???出来ないのでしょうか?
class a{
function b{
include_once('inc_php');
}
}
#inc_php
function j(){
echo '123456789';
}
0605nobodyさん
04/08/01 09:17ID:???その書き方だと、function b の中に function j が入ってくることになるよ。
class a{
function j(){
include_once('inc_php');
}
}
# inc_php
echo '123456789';
キレイにしたいならstrategyパターンあたりを使えばええんでないの?
0606nobodyさん
04/08/01 09:38ID:???そうではなくて、includeした時に結果としてclass内の関数として
includeする方法がないものかと想いまして質問させて頂いております。
[結果イメージ]
class a{
function b{
}
function j(){
echo '123456789';
}
}
0607nobodyさん
04/08/01 10:14ID:???ページ2でprint $name;
ページ3で$nameを表示しようとしたらできないぽ;;
0609nobodyさん
04/08/01 13:41ID:???EUCで書けば多分日本語関係のエラーはほとんど潰れると思う。
SJIS使うなら変数は{$hoge}と括弧でくくっとこう。${hoge}だったかもしれんが。
print "コメントは".$input_len."文字までです。";でもOK。
0610nobodyさん
04/08/01 15:23ID:???0611nobodyさん
04/08/01 16:03ID:6iApVh2k<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>
これに<CATEGORY Num="03">その他2</CATEGORY>を書き込みたいのですが
</ITEM>の後ろにしか書込めません。
</ITEM>の手前にポインタを移動する方法を教えて下さい。
fseekっていうのじゃ無理ですよね?
0613Imo ◆.jC7ANgFY.
04/08/01 16:24ID:???ちょっとヒント。
ob_start関数、これを使えばseekのようなことはできないとしても
期待した結果に持っていくことはできますよ。
0614Imo ◆.jC7ANgFY.
04/08/01 16:30ID:???両方可能ですよ。
それと参考までに、
2次元配列使うときは必ず{}でかこまなければなりません。
もしも「echo "ほげ$hoge[1][0]ほげ";」と書いた場合は
echo 'ほげ' . $hoge[1] . '[0]ほげ';と等価になり
「ほげArray[0]ほげ」と出力してしまいます。
echo "ほげ{$hoge[1][0]}ほげ";と書くのが正しい方法です。
0615Imo ◆.jC7ANgFY.
04/08/01 16:40ID:???マニュアルには以下のようにかかれています。
「複数のファイルや複数のPHPブロックで分割してクラス
を定義定義することは できません。」
とはいっても似た処理として、
extends(クラスの継承)を使う方法がありますので
そちらを一度は見てみる価値はありそうです。
0616nobodyさん
04/08/01 17:08ID:???アフォか。そんな言語使用イヤ過ぎる。
普通にやれよ。
funciton hoge($params)
{
require_once('hoge.func.php');
return hoge($params);
}
0617611
04/08/01 17:12ID:6iApVh2kマニュアルには出力のバッファリングを有効にするとあるのですが、
これでポインタ移動できるんでしょうか?
「ob_start ポインタ」でググってもそれらしき記述が見つからないのですが、、、
0618Imo ◆.jC7ANgFY.
04/08/01 17:48ID:???一応こんなことができますよ。
ob_start();
echo <<<EOM
<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>
EOM;
$data = ob_get_clean();
echo substr_replace($data,
"<CATEGORY Num=\"03\">その他3</CATEGORY>\n",
strrpos($data, '</ITEM>'), 0);
0619nobodyさん
04/08/01 18:03ID:???マニュアルのそれは昔に読んだんですよね
funcitonをclass内に読み込み方法があればclass外のfunciton
と競合しないですむので理想的と考え質問したのですが、
それは出来ないみたいですね。
extendsを調べてみます^^ありがとうございます。
>>616
require_once()とinclude_once()の差はエラー時の処理の差で
しかないと記憶しているのですが違いましたか?
アフォな理由を説明してくれ!
0620611
04/08/01 18:11ID:6iApVh2kすいません説明不足でした。
送信されてきた<CATEGORY Num="03">その他2</CATEGORY>を
<?xml version="1.0" encoding="UTF-8"?>
<ITEM>
<CATEGORY Num="01">その他</CATEGORY>
<CATEGORY Num="02">その他2</CATEGORY>
</ITEM>
と書かれているxmlファイルに書き足したいのです。
0621nobodyさん
04/08/01 18:12ID:???何でそこに反応するかな。
> return hoge($params);
のように以降の処理を普通に実装すりゃいいだけだろう。
0622Imo ◆.jC7ANgFY.
04/08/01 18:23ID:???いったんファイルをすべて読んでしまってから書き換えて出力するしかありませんね。
文字の挿入に関してはsubstr_replaceを見ておくといいかと思います。
# fseekで位置を移動するにも場所を知る必要性があるのであらかじめ全部読み取ったほうがいいです。
# fseekの場合</ITEM>に上書きしてしまいますし、、、
0623nobodyさん
04/08/01 18:41ID:???あぁ、funciton内で他のfuncitonを呼ぶのがですね^^;。
requireするファイルを絶対パスで実行されると不都合なファイルが
あるからなんですが構造として美しいものではありませんね。
0625nobodyさん
04/08/01 20:05ID:???・2重投稿の防止
・連続投稿の防止
・書き込みした内容の編集
・書き込みした内容の削除
当方激しく初心者です;;
もしよければアドバイスお願いします・・・
0626nobodyさん
04/08/01 20:11ID:???>・2重投稿の防止
>・連続投稿の防止
>・書き込みした内容の編集
>・書き込みした内容の削除
この機能を除いた掲示板はもうできたのか?
0628nobodyさん
04/08/01 20:16ID:???0629625
04/08/01 20:18ID:???みたいな感じかな・・・
0630nobodyさん
04/08/01 20:19ID:???0631625
04/08/01 20:20ID:???すまん、初めて聞いた_| ̄|○
0633nobodyさん
04/08/01 20:47ID:???どのようして削除、編集するコメントを
指示するのか考えなかった?
0634nobodyさん
04/08/01 22:16ID:2fDXisU00635nobodyさん
04/08/01 22:21ID:???っておかしな言葉だな。
<?
require("hogehoge.cgi");
?>
であかんのかい?
0636634
04/08/01 22:28ID:2fDXisU0実行結果を表示させたいのですが。
0638nobodyさん
04/08/01 23:03ID:???どうすればよいでしょうか?
0639nobodyさん
04/08/01 23:12ID:???そのクエリーをphpMyAdminで送ったら正常動作する。
そういう経験ありますか?今これではまってます。助けて。
MySQLサーバーは3.23, phpは5.00ダー。
0641Imo ◆.jC7ANgFY.
04/08/01 23:16ID:???もしかして複数行送ったりとかしてないですよね?
>>638
削除するならば
@unlink('./log.cgi');
0Byteにするならば
fclose(fopen('./log.cgi', 'w'));
0642639
04/08/01 23:19ID:???0643634
04/08/01 23:23ID:2fDXisU0507さん教えてください。
0644nobodyさん
04/08/02 02:36ID:???これだから厨コテは
0646nobodyさん
04/08/02 03:52ID:???つーかあれクラス内の関数とか言ってるし関数とメソッドの区別がついとらんだけやろ
最初理解不能だったので、グローバルスコープ要素をクラスメンバにしようっていう
発想の凄まじさは認めたいが、、なんかどの初心者も俺を置いて遥か彼方に旅立っ
ていってしまうよ
0647nobodyさん
04/08/02 04:05ID:???やったことあると思うが開いてるならゼロにftruncateすればいい。
ついでにこれを機会にマニュアル読むようになったほうがいいよ。
0648nobodyさん
04/08/02 05:24ID:???意外と・・・
0649nobodyさん
04/08/02 08:23ID:???#記事書き込み処理
if ($action == "書き込み"){
if ($name == ""){
print " </CENTER>ERROR:名前が記入されていません";
}elseif ($comment == ""){
print " </CENTER>ERROR:コメントが記述されていません";
}else{
if ($subject == ""){
$subject = "無題";
}else{}
}
}
書き込みボタンを押したんだが記事書き込み処理
が無反応です。なぜかactionに書き込みが入らない模様・・・
ナゼダ!!!!!!!!!!!
0650nobodyさん
04/08/02 08:36ID:???メンバ関数と呼ばれるケースもあるしな
0651nobodyさん
04/08/02 08:39ID:???$_POST['action'],$_GET['action'],$_REQUEST['action']
のどれかの中身を覗いてみそ
0652649
04/08/02 09:01ID:???0653nobodyさん
04/08/02 09:06ID:???ん、フォームの方かな^^;
<INPUT type="submit" name="action" value="書き込み">
だけ書いてもダメだよ
<form method='POST' action='filename'>
<INPUT type="submit" name="action" value="書き込み">
</form>
としましょう
0654649
04/08/02 09:15ID:???<INPUT type="submit" name="action" value="書き込み">
</FORM>
とりあえずFORMです・・・
これでもぬるぽ_| ̄|◎
0655649
04/08/02 09:17ID:???どうやら使っているPHPエディタが問題のようです;;
ありでした〜
0656nobodyさん
04/08/02 09:21ID:???PHP全体は、ひとつのプロセスが終ってから次のプロセスを実行するのでしょうか?
テキストファイルに、ただ10000回ほど読み込んだ物をまた上書きするだけのスクリプトを書き、
3,4窓で同時に回したのですが、どうも終ってから動き出しているような気がしてなりません。
ファイルロック用の関数を外した場合でも同じようでした。
そもそもテストの仕方が間違っているのかもしれません;;
環境はWindowsXP、AnHttpd、PHP4.3.2です。(同じPC、同じブラウザ)
また、正しいファイルロックのテストの方法を教えていただけたら幸いです…。
0658655
04/08/02 09:42ID:???0659nobodyさん
04/08/02 09:57ID:???まず WindowsXP、AnHttpd、PHP4.3.2 を
*BSDもしくはLinux、Apache 1.3.31、PHP 4.3.8 に変えてはどうでしょう?
#OSはともかく、httpdとPHPはマジ。
で、ロックをかけたとき、書き込み中、ロックを解除したときに何らかの出力をさせると良いかと。
あと書き込み中にusleep()してわざと処理に時間がかかるようにすると分かりやすいかも。
flock($fp, LOCK_UN);し忘れてるってのは無しの方向でよろ。
0660nobodyさん
04/08/02 09:58ID:???#記事の読み込み
$message = file($logfile);
$count = count($message);
if ($count>=$page){
$count = $page;
}
for ($i=0;$i < $count;$i++){
list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2) = split( ",", $message[$i]);
print " <FONT size=2>$no2</FONT><INPUT type=checkbox name=edit value=$no2> <font size=bSize color=$tCol><b>$title2</b></font>";
if ($mail != ""){
print " <FONT size=2>投稿者:<A href=mailto:$mail2>$name</A></FONT><BR>";
}else{
print " <FONT size=2>投稿者:$name2</FONT><BR>";
}
print " <font size=bSize color=$color>$comment2</font>";
}
?>
HTML内に上を記述するとページが何も表示されなくなりました・・・
なぜでしょうか・・・
0661Imo ◆.jC7ANgFY.
04/08/02 10:02ID:???if ($count>=$page){
$count = $page;
}
ここで$countがリセットされているようですよ。
0663Imo ◆.jC7ANgFY.
04/08/02 10:08ID:???それと正しいファイルのロック方法は
$fn = fopen($file, 'w');
flock($fn, LOCK_EX);
fwrite($fn, $data);
fclose($fn);
ではなく
$fn = fopen($file, file_exists($file) ? 'r+' : 'w+');
if (flock($fn, LOCK_EX)) {
ftruncate($fn, 0); rewind($fn);
fwrite($fn, $data);
} else {
// ロック失敗
}
fclose($fn);
ですよ。ロックは失敗する可能性もあります。
0664nobodyさん
04/08/02 11:01ID:FFy40LXRcgiとphpを使っていますが、
cgiファイルを使って、一部phpファイルを使いたいです。
たとえばcgi掲示板の中にphp表示(例えば別の掲示板も表示)するとか・・・
ご指導ください。
0665nobodyさん
04/08/02 11:09ID:???0667nobodyさん
04/08/02 11:16ID:???バグフィクスされてるのでPHPを4.3.8にするのも忘れずにがんがってください。
下記URIがApacheとPHP4.3.8のインストールに良さげと思った。
ttp://allabout.co.jp/career/database/closeup/CU20031114/
ちなみにイモ回答者の言うことは微妙に間違ってるから信じちゃだめですよ。
0668nobodyさん
04/08/02 12:49ID:???http://members.home.nl/saen/Special/Zoeken.swf
PHPで実現するにはどうすればよいのでしょうか?
0671nobodyさん
04/08/02 13:11ID:???セッションIDだけはクリアせずそのまま使用したいのですが
何かいい方法はないでしょうか?
現在はsession_unsetを使ってクリアしようとしています。
0672660
04/08/02 13:43ID:???if ($count>=$page){
$count = $page;
}
もし$pageより$countのがでかければ
$countに$pageを代入したいのですが・・・
0673660
04/08/02 13:51ID:???しかしこんなバグが残ってしまいました
Aを書き込みする、Bを書き込みすると更にAが書き込みされる・・・
なーぜだああああああああああ
0674660
04/08/02 13:58ID:???list($no2,$name2,$mail2,$subject2,$comment2,$time2,$host2) = split( ",", $message[0]);
if ($no2 == ""){
$no = 1;
}else{
$no = $no2+1;
}
if ($name != $name2 && $comment != $comment2){
$put = implode(",", array($no,$name,$mail,$subject,$comment,$time,$host,$color,$pass));
$message = file($logfile);
$fp = fopen($logfile, "a");
rewind($fp);
fputs($fp, "$put\n");
if($max <= sizeof($message))
$num = $max - 1;
else
$num = sizeof($message);
for($i = 0; $i < $num; $i++){
fputs($fp, $message[$i]);
}
fclose($fp);
$taju = 0;
unset($message);
}else{
$taju = 1;
}
0675nobodyさん
04/08/02 13:59ID:???0676nobodyさん
04/08/02 14:01ID:FFy40LXRcgiの外部コマンドでphpを呼び出せるそうですが、
出来るんですね。ただ解説しているサイトがない・・・_| ̄|○
■ このスレッドは過去ログ倉庫に格納されています