くだすれPHP(超初心者用)
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/06/12(月) 14:06:01ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。
PHP Home Page
http://www.php.net/
0320nobodyさん
2006/09/01(金) 03:36:54ID:???どうでもいいからもう42関係のレスやめろよ。
032142歳
2006/09/01(金) 14:17:34ID:+wXqiG2uですか? 知りませんでした。 これも役立ちそうです。 ありがとうございます。
0323nobodyさん
2006/09/05(火) 18:19:25ID:???$myURL=str_replace($_SERVER['DOCUMENT_ROOT'],"http://".$_SERVER['HTTP_HOST'],$_SERVER['SCRIPT_FILENAME']);
こうゆうこと?
外してるかもしれんし、もっとスマートな道がある気もする
0324nobodyさん
2006/09/05(火) 20:56:32ID:???define('SCRIPT_URL', (empty($_SERVER['HTTPS']) ? 'http' : 'https').'://'.$_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']);
0325nobodyさん
2006/09/06(水) 19:26:47ID:???SESSIONが保持できません。
SELFで自分に戻るとSESSIONの中身は取れているのですが、
何が考えられるでしょうか?
ちなみにSESSIONをセーブして中身をみていたら、
別のページに移動したときに2個目のセッションが作成されていました。
0327nobodyさん
2006/09/07(木) 10:28:51ID:fMyB6iZLfor($i = 0 ; $i < 5; $i++){
for($ii = 0 ; $ii < 5; $ii++){
$arr[$i][$ii]=1;
}}
print "$arr[3][3]";
の様な事をしたいのですが、出力される値がArrayしか出なくて困っています。
2次元配列を簡単に組めるにはどうしたらいいのですか?
0331nobodyさん
2006/09/09(土) 02:41:28ID:C6V07CE/要素[1]さんの状態は[2]
要素[3]さんの状態は[4]
要素[5]さんの状態は[6]
[配列ary]
array ( [0] => ココカラ [1] => Aさん [2] => 元気 [3] => Bさん [4] => まあまあ [5] => Cさん [6] => 空元気 )
ここからCさんの状態を調べるスクリプトを書いてみたのですが
for( $i=1; $i<5; $i+2)
{
if(strpos($ary[$i], 'Cさん')==false)
{
}
else
{
$j = ++$i;
$status = $ary[$j];
}
}
何故かこうすると動かず、for文の$i+2を$i++に変更すると正常に動きます。
そもそも$i+2という記述はおかしいのでしょうか?教えてください。
0332nobodyさん
2006/09/09(土) 03:18:23ID:???とりあえず他は知らんけど、 $i+2 は $i+=2とか
名前と状態に等しいものが無いという前提でarray_search()
$j = array_search("Cさん",$ary);
if ($j != false) {
echo $ary[++$j];
}
な感じ
0333nobodyさん
2006/09/09(土) 03:53:04ID:???感じで記述するのでは負荷等は変わってくるのでしょうか?
0334nobodyさん
2006/09/09(土) 03:53:32ID:???若干ズレた答えだけど
Array(
[Aさん] => 元気
[Bさん] => まあまあ
[Cさん] => 空元気
)
とか
Array(
[0] => Array( [name] => Aさん [status] => 元気 )
[1] => Array( [name] => Aさん [status] => そこそこ )
[2] => Array( [name] => Bさん [status] => 空元気 )
)
にしたほうがわかりやすいかもしれないね、うん
0335331
2006/09/09(土) 05:53:34ID:C6V07CE/ありがとうございました。
+=2で美味くいきました。
アドバイス頂いてからマニュアル見直してみたんですけど、$i+2だけだと代入しないんですね。
試しに
for( $i=1; $i<7; ($i=$i+2))
こうしてみたところ、これでも期待通りの結果が得られました。
あ、あとarray_serchという関数ありがとうございました。初めて聞く関数だったので今後の参考にします。
#只、今回は状態に同一の値が入る可能性があるので、やめときました。
>>334
そうですね。Array[0]に不必要な値もある事ですし、ちょっと綺麗にしようと思います。
何はともあれ、これで眠れそうです。ありがとうございました。
0336nobodyさん
2006/09/09(土) 06:16:44ID:PgI2vPCagoogle mapに反映させたいのですが、
うまくgoogle mapに反映できません。
多分、PHPで読み出したデータをjava script側にうまく
渡せていないと思うのですが、よくわかりません。
すみませんが、ご教授お願いします。
ソースの主要部分を抜き出します。
<?php
$handle = fopen ("lat.txt", "r");
$lat = fgets($handle, 1024);
fclose($handle);
$handle = fopen ("lon.txt", "r");
$lon = fgets($handle, 1024);
fclose($handle);
?>
function onLoad() {
map.setCenter(new GLatLng( $lat , $lon ),4);
marker = new GMarker(new GPoint( $lat , $lon ), markeropts);
}
0337nobodyさん
2006/09/09(土) 06:20:58ID:???まあ、よっぽど大きなサイズでない限り、どちらの方式でも
無視できる程度の負荷の差しかないと思うけど。
ただ、ソースの見通しの良さとか考えると、前者のほうがオススメ。
0338nobodyさん
2006/09/09(土) 07:01:23ID:???function onLoad() {
map.setCenter(new GLatLng( <?php echo $lat ?> , <?php echo $lon ?> ),4);
marker = new GMarker(new GPoint( <?php echo $lat ?> , <?php echo $lon ?> ), markeropts);
}
かな
0339nobodyさん
2006/09/09(土) 10:38:32ID:/+q9xMfeアパッチはインストールできたけどPHPがうまくいかない。発狂しそう。
0341nobodyさん
2006/09/09(土) 10:48:47ID:/+q9xMfeそれは追加しました。
でも「LoadModule php5_module c:/php/php5apache.dll」を書くと
アパッチが再起動できなくなってしまいます。
バージョンは
PHP-5.1.6
Apache-2.2.3
を使ってるんですが、
これよりも前(といってもPHP5)の解説サイトを見ながら設定しても上手くいかないもんなんでしょうか。
0342339
2006/09/09(土) 10:51:23ID:???あとsage忘れてました、すみません。
寝ずにやってて頭に血が上りつつあるので
耳鼻科行ってクールダウンしてきます。。。
0343nobodyさん
2006/09/09(土) 10:52:14ID:???apache2.2.x を使っているなら Apache2.0.5x に変える
どうしてもapache2.2.xを使いたいならPHP5.2.xをさがす
0344nobodyさん
2006/09/09(土) 11:32:26ID:38GEQ8NEphp5apache.dllはApache1.3用のdllだ
でPHP5.1.6(Win32)にはApache2.2用のdllは同梱されていない
0347339
2006/09/09(土) 13:09:02ID:???耳鼻科が思いのほか混雑していて返事遅れてしまいました。
原因はまさにそれですね!
Apacheを変えたらできました。
素早い正確な本当にどうもありがとうございました。
0348nobodyさん
2006/09/09(土) 18:29:08ID:???ひどい日本語だな・・・
0349nobodyさん
2006/09/09(土) 21:32:07ID:???A[=aaa]BC[=bbb]DEF[/=bbb]GH[/=aaa]IJK
などと言う文字を
A<span class="aaa">BC<span class="bbb">DEF</span>GH</span>IJK
という風に正規表現で置換したいんですけれども、
$text = eregi_replace('\[(.+?)\]','<span class="\\1">', $text);
としてもうまく出来ません・・・
どうしたらよいでしょうか。よろしくお願いします。
0351nobodyさん
2006/09/09(土) 23:39:20ID:???マニュアルにも書いてあるだろうに。
0352nobodyさん
2006/09/10(日) 01:01:26ID:???あらやる面でeregに勝っているようなので、使ってみることにします。
・・・でもうまく動かないorz
0354nobodyさん
2006/09/10(日) 12:10:48ID:???0355nobodyさん
2006/09/10(日) 14:05:09ID:???言っているようですが書いてるし原因が分かりません。
ご指摘をお願いしますorz
PHPのバージョンは 5.1.6 です。
<?php
class Hoge
{
public function __construct( $path = NULL )
{
if( !is_null( $path ) )
{
read( $path );
}
return;
}
public function read( $path = NULL )
{
/*!
ファイル読み込み処理を実装する予定。
*/
return;
}
}
$hoge = new Hoge( 'test.txt' );
?>
エラー内容
Fatal error: Call to undefined function read() in N:\sample.php on line 8
0356355
2006/09/10(日) 14:08:22ID:???read( $path );の行がline8です。
0357355
2006/09/10(日) 14:09:33ID:???0358nobodyさん
2006/09/10(日) 14:09:52ID:???0359nobodyさん
2006/09/10(日) 14:10:34ID:???0362nobodyさん
2006/09/10(日) 15:01:09ID:???どっちが良いのか、どちらにすべきかは知らないけど。
誰か詳しい人教えてくれ。
0363355
2006/09/10(日) 18:49:47ID:???>メンバ変数を作ってそれを使えばいいんじゃないか?
ファイルパス(メンバ変数)をglobalにする必要がないと思ったので
newもしくはread時に渡すようにしています。
0365363
2006/09/10(日) 22:43:21ID:???class Hoge
{
public $filePath;
/*コンストラクタは省略*/
public function read()
{
/*$this->filePathのファイルを読む*/
return;
}
}
$hoge = new Hoge();
$hoge->filePath = 'data.txt';
$hoge->read();
メンバ変数=$filePathのことで、パブリックな$filePathにパスをセットして
read()を呼べば引数にパス渡さなくてすむって意味だと思った。。
0366363
2006/09/10(日) 22:47:54ID:???globalじゃない…publicですたorz
0367nobodyさん
2006/09/10(日) 23:49:52ID:???んじゃprivateにすれば?
・・・というのは置いといて、
コンストラクタで引数で渡してメンバ変数に代入したり
あるいはファイル名登録用のメソッドを作ったりしてもいいよね。
というか355の方法じゃクラスにしてる意味が全く無くない?
0368366
2006/09/11(月) 00:35:35ID:???>んじゃprivateにすれば?
情報の後出しのようでもうしわけありません。
エラーの確認用のHogeクラスでは省略していますが実際使おうとしている
クラスではprivate $filePathを持たせています。
引数無しでread()を呼んだ場合に$this->filePathのファイルを読み直します。
>コンストラクタで引数で渡してメンバ変数に代入したり
コンストラクタのなかでreadまでやるからreadのなかでメンバ変数に
代入するようにしているのですが、、コンストラクタ(ファイルパスのセット)と
read()は分けた方がいいのでしょうか。
>あるいはファイル名登録用のメソッドを作ったりしてもいいよね。
read()とファイルパスのセットを分けた方が良いのであればそうします。
どちらがよいのでしょうか。
0369nobodyさん
2006/09/11(月) 15:31:35ID:9vOMCYca$_POST["hoge"]=$_SESSION["mofu"]; みたいに直接代入という
方法ってプログラム上アリですか?無しですか?
この方法で確かにちゃんと動くけど明らかに使い方は間違ってるような
気がする($_POSTはformからのデータを貰う為のものと思っているから)
のです。
なぜこんなことをしたのかと言うと、前画面で入力したデータを
ターゲットのフォームに初めから入れておきたいが、ターゲット画面で
入力エラーを検知した場合は、そのエラーの箇所を空白にし、他の入力
箇所は保持したいのです。
ターゲット画面でsubmitをしたとき、呼び出される画面はターゲット画面で、
入力にエラーが無い場合はHeaderで次画面に飛ばすのです。
分かりにくい表現で恐縮ですが皆様の考えを教えてください。
0370nobodyさん
2006/09/11(月) 16:05:42ID:???0371nobodyさん
2006/09/11(月) 17:08:12ID:???$_POSTに代入っていうのは気持ち悪いね
動くんだろうけど確かに使い方は間違ってる
他の変数に代入するんじゃだめなの?
どうせサニタイズするんだったら$_POSTそのまま使うんじゃないし
0372nobodyさん
2006/09/11(月) 18:08:47ID:qCpJYXXZ$img = file_get_contents('画像のURL.jpg');
echo imagesx($img);
としてもエラーが出てしまいます。
0373nobodyさん
2006/09/11(月) 18:30:00ID:???0374nobodyさん
2006/09/11(月) 21:31:19ID:9vOMCYcaif(ereg("[^0-9ア-ンー0-9]",$_POST["kanaName"])){
echo "全角カタカナと数字以外禁止";
}
しかしこれだとヤ以降(50音順)がカタカナと認識されません。
よい方法があったら御教授願います。
0375nobodyさん
2006/09/11(月) 22:12:57ID:???0376nobodyさん
2006/09/12(火) 07:22:51ID:???設計を根本的に見直そう。
$_POSTで受け取った値は必ずスクリプト内で
別の変数に代入してから計算なりアウトプットなりするクセをつける。
そんで、エラーを検知した場合は、最初の画面に戻して、
どういうエラーがあったのかを表示して再入力させるべき。
もちろんこの時、エラーがなかった項目については値を保持して、
フォームに既に入力されてる状態にしてあげること。
0377374
2006/09/12(火) 14:25:02ID:FIxGk3KG何か問題でも?
教授=プロフェッサーだけじゃなくて知識等を与える事って意味もあるはず
だから知識を与えて欲しいと願うのはダメ?
それはさておき正規表現の問題が解決できません。
ア-ンーとしてあるのにガ等の濁点やァ等の拗音(だっけ)がマッチしたりしてます。
どうやったら解決できるでしょうか?
0378nobodyさん
2006/09/12(火) 14:50:15ID:???自分のレベルが糞より低い位置にあるんだから、バカに徹して頭を垂れているべきだ。
それが世渡りつーものだ。
で、そんなもん正規表現じゃねー!!恥ずかし過ぎ!つか、笑った。
もし、sjisなら片仮名文字は
\x83[\x40-\x96]
バカだから文字コードの事も考えていないよね?
仮名文字を使って正規表現とか言うのだから。
0380nobodyさん
2006/09/12(火) 15:07:49ID:???そこでmb_eregですよ!
0381374
2006/09/12(火) 15:10:12ID:FIxGk3KGなるほど サンクス 今度からそうするよ。
0382nobodyさん
2006/09/12(火) 15:19:09ID:???0384374
2006/09/12(火) 15:57:14ID:FIxGk3KG実際に組むとき\x83[\x40-\x96]はカタカナだから
if(!(ereg("^\x83[\x40-\x96]",$_POST["kanaName"]))){
echo "全角カタカナと数字以外禁止";
}
としてみました。
全角カタカナ以外はこれで入力できなくなりました(数字も入らなくなっちゃったけど)
その後mb_eregを使ってみました。
if(!(mb_ereg("^[0-9ア-ンー0-9]",$_POST["kanaName"]))){
echo "全角カタカナと数字以外禁止";
}
こうすると数字も弾かれないので後者を使うことにしましたがァィゥェォとヴが弾かれるので
if(!(mb_ereg("^[0-9ア-ンーヴァ-ォ0-9]",$_POST["kanaName"]))){
echo "全角カタカナと数字以外禁止";
}
これでテストした結果、今のところは期待通りになっていると思います。
ありがとうございました。
>>382 手ぇ遅いので試すまで待って・・・
>>383 正解。
0386nobodyさん
2006/09/12(火) 16:18:19ID:???オマエ、本物のバカだな基礎とか基本とか全部飛ばしているな
仮名文字を使うなつーてるのにバカだから使うし
$baka = $_POST["kanaName"];
if(!ereg("\x83[\x40-\x96]",$baka) || !ereg("\x82[\x4F-\x58]",$baka)|| !ereg("[0-9]",$baka)) echo '全角カタカナと数字以外禁止';
0387nobodyさん
2006/09/12(火) 16:30:22ID:???> 仮名文字を使うなつーてるのにバカだから使うし
http://www.php.net/manual/ja/function.mb-ereg.php
調べもしないで偉そうだなおい
0389nobodyさん
2006/09/12(火) 16:35:02ID:???俺も宗教的な理由で仮名文字は使わないな
別におかしくないし、sjis環境なら使わないほうがいいし
それ以前にmbって・・・まーいいや。
0391nobodyさん
2006/09/12(火) 17:26:25ID:???そこが大事だろ!
おれみたいな初心者に教えてくれよ
0392nobodyさん
2006/09/12(火) 17:45:06ID:???本当に宗教的な理由としか言い表せないだろう
mdで仮名文字(2バイト文字)が使えるからと安易にいたければ使えばいいかと
もし、自分が宗教的な物に気付けばどこかで仮名文字は捨て去る事となるから
但し、生涯教えて君や初心者を通すなら気付かず使うことととなるだろう
それはそれで良いと思う。
0393nobodyさん
2006/09/12(火) 17:47:41ID:???0394391
2006/09/12(火) 17:59:17ID:???プログラムコードには極力日本語を含まないようにしてる
理由は単純に気持ち悪いからだ
でも実際にどんな問題がはらんでるかが知りたい
・「マルチバイト」そのものがあまり信用できないからアスキーコードを使う
・PHPのmbまわりが信用ならない
・環境設定によって左右されるようなコードを書くべきでない
いろいろ考えてみた あたってたらそう言ってくれ
あたってなかったら調べてみたりするから
0395nobodyさん
2006/09/12(火) 23:13:17ID:???日本語を含んだパスを指定して「ファイルが読めない。」と悩む私が昔
いました。
0396nobodyさん
2006/09/13(水) 02:23:45ID:???RFCとかが統一すりゃいいんだ!
そしたら「宗教的」なヲタたちが啓蒙普及活動をしてくれる。
そしてプログラミングにおける日本語の問題も全て解決する。
0397nobodyさん
2006/09/13(水) 04:18:32ID:???0398nobodyさん
2006/09/13(水) 14:35:51ID:???0399nobodyさん
2006/09/13(水) 18:06:28ID:fd+xBvUi参考にしたサイト
http://www.y2sunlight.com/ground/?PHP5.0%2F6.PEAR%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB
OSはWindowsXP Pro PHPは5
このサイトに従ってインストールしていたらpearのバージョンが1.3.1になっていました。
しかしサイトの画像で見るとバージョンは1.4.6、最新は1.4.11なので、
pear install pear としてみるとインストール済と言うことでスキップされました。
アンインストールしてからならインストールできるだろうと思い、
pear uninstall pear としたら、pear.bat自体がなくなってしまいました。
最新バージョンの1.4.11をインストールする方法を教えてください。
//pear download-allとするとXML error at line 1, check URL
Invalid return payload: enabling debugging to examine incoming payloadと出るのは仕様ですか?
0400399
2006/09/13(水) 18:40:21ID:fd+xBvUi騒がせて巣万個
0401nobodyさん
2006/09/13(水) 19:37:08ID:ny0rhUNk0402nobodyさん
2006/09/13(水) 19:38:45ID:???0403nobodyさん
2006/09/13(水) 19:40:07ID:???0404nobodyさん
2006/09/13(水) 20:15:13ID:qvwVE6Hq例えば
$a が 2ちゃんねる だったら、
あいうえお
かきくけこ
さしすせそ
$b が 3ちゃんねる だったら
いろはに
ほへと
ちりぬる
って表示するようにして、
$a=2ちゃんねる $b=3ちゃんねる だったら
あいうえお いろはに
かきくけこ ほへと
さしすせそ ちりぬる
と表示するようにしたいんですが、
どのようにすればいいでしょうか?
0405nobodyさん
2006/09/13(水) 20:47:12ID:???if ($a == "2ちゃんねる" && $b == "3ちゃんねる") {
echo "あいうえお いろはに" . "<br />\n";
echo "かきくけこ ほへと" . "<br />\n";
echo "さしすせそ ちりぬる" . "<br />\n";
} elseif ($a == "2ちゃんねる") { // A
echo "あいうえお" . "<br />\n";
echo "かきくけこ" . "<br />\n";
echo "さしすせそ" . "<br />\n";
} elseif ($b == "3ちゃんねる") { // B
echo "いろはに" . "<br />\n";
echo "ほへと" . "<br />\n";
echo "ちりぬる" . "<br />\n";
}
こうではなくてAの出力とBの出力を合成して表示したいという意味であれば、
$str['a'] = array("あいうえお", "かきくけこ", "さしすせそ");
$str['b'] = array("いろはに", "ほへと", "ちりぬる");
if ($a == "2ちゃんねる" && $b == "3ちゃんねる") {
for ($n = 0; $n < 3; $n++) { echo $str['a'][$n] . " " . $str['b'][$n] . "<br />\n"; }
} elseif ($a == "2ちゃんねる") {
for ($n = 0; $n < 3; $n++) { echo $str['b'][$n] . "<br />\n"; }
} elseif ($b == "3ちゃんねる") {
for ($n = 0; $n < 3; $n++) { echo $str['a'][$n] . "<br />\n"; }
}
といった感じに配列でも使わないと多少メンドイことになる。
0406nobodyさん
2006/09/14(木) 04:55:29ID:w1P9D6Nk0407nobodyさん
2006/09/14(木) 13:39:34ID:RcWvZ0xRPHP5.0.2
pear1.3.1を使っています。
<?
include_once "Mail.php";
echo "メール送信テスト<br>";
$recipients = 'XXX@XXX.jp';
$headers['From'] = 'test@test.test';
$headers['To'] = 'XXXa@XXX.jp';
$headers['Subject'] = 'テストサブジェクト';
$body = "ようこそバーボンハウスへ\n この1杯は奢りだからまず飲んで落ち着いて欲しい\n ごめん、またなんだ。\n";
$mail_object =& Mail::factory('mail');
$result = $mail_object->send($recipients, $headers, $body);
if (PEAR::isError($result)) {
echo"DEAD END";
die($result->getMessage());
}
echo $result;
?>
としたところ、メールは送受信できるのですが、$headers['From']と$headers['Subject']の内容が表示
されません。
メール送信が出来るならPEARやPHP、Apacheの設定ではないと思うのですが・・・。
どうやったら$headers['From']と$headers['Subject']の内容が表示できるでしょうか?
0408nobodyさん
2006/09/14(木) 13:41:58ID:RcWvZ0xR$bodyは表示できます。
PHP5.1だとちゃんと表示できるのですがPHP.iniのExtensionのMySQLコメントアウトをはずしても
PHP.infoでMySQLが使えるようになってないので断念しました。
0409nobodyさん
2006/09/14(木) 13:46:31ID:???探しているのですが、見あたらなくて
0410nobodyさん
2006/09/14(木) 17:45:56ID:pPxPgU+d<?php
$cmd=$_POST['cmd'];
if($cmd!=null)
echo $cmd;
?>
こんなPHPのソースがあって、
ここにtelnetで接続し
POST /index.php HTTP/1.0
Content-Length: 5
cmd=1
と言うテキストファイルを送信しました。
確かに200OKと正常にヘッダが返ってきたのですが、
帰ってきて欲しいのは、1と言う文字です。
それが帰ってこないのですが、どうしてでしょうか?
HTTP関連も調べたのですが、何が原因かわかりません。
0411nobodyさん
2006/09/14(木) 17:59:41ID:iFbFyD2f自動的にSQL文を組み立ててくれる機能はありますか?
0412nobodyさん
2006/09/14(木) 20:07:25ID:???if($cmd!==null)
0413nobodyさん
2006/09/14(木) 21:18:02ID:???PEAR::Mailを使ったことがないので内部で処理してないとは言い切れないけど、
マルチバイト文字列(日本語とか)突っ込むときは、エンコーディングが必要なのでは?
あと、PEARに関する質問は
【PHP】PEAR Part2
http://pc8.2ch.net/test/read.cgi/php/1122899232/
がいいかな。
0416nobodyさん
2006/09/15(金) 18:42:11ID:???ちなみに、それは、
Lengthだけじゃなくて
ContentType: application/x-www-form-urlencoded
を送信してないから。
これで、とりあえずは1と帰ってくるよ。
0418帰ってきた42歳
2006/09/16(土) 01:15:26ID:yXjwnh9nm01 => array(label => 'お名前', formtype => 'text', opt => array('size' => '40', 'maxlength' => '220', 'style' => 'ime-mode:inactive')),
という感じであるのですが、ここを自動的に日本語入力に指定することはできないものですか?
テンプレートでいじるのでしょうか?
0419帰ってきた42歳
2006/09/16(土) 01:16:27ID:yXjwnh9n今、冷静に見て… すみません。 ime-mode が i-modeに見えていました
■ このスレッドは過去ログ倉庫に格納されています