トップページphp
1001コメント346KB

くだすれPHP(超初心者用)

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/06/12(月) 14:06:01ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、 
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 
PHP使いが優しくコメントを返しますが、 
お礼はPHPの布教と初心者の救済をお願いします。 

PHP Home Page 
http://www.php.net/
03633552006/09/10(日) 18:49:47ID:???
>>362
>メンバ変数を作ってそれを使えばいいんじゃないか?
ファイルパス(メンバ変数)をglobalにする必要がないと思ったので
newもしくはread時に渡すようにしています。
0364nobodyさん2006/09/10(日) 20:35:58ID:???
>>363
ちょっと待て
メンバ変数のことを勘違いしてないか?
03653632006/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()を呼べば引数にパス渡さなくてすむって意味だと思った。。
03663632006/09/10(日) 22:47:54ID:???
>ファイルパス(メンバ変数)をglobalにする必要がないと思ったので
globalじゃない…publicですたorz
0367nobodyさん2006/09/10(日) 23:49:52ID:???
>>366
んじゃprivateにすれば?
・・・というのは置いといて、
コンストラクタで引数で渡してメンバ変数に代入したり
あるいはファイル名登録用のメソッドを作ったりしてもいいよね。

というか355の方法じゃクラスにしてる意味が全く無くない?
03683662006/09/11(月) 00:35:35ID:???
>>367
>んじゃprivateにすれば?
情報の後出しのようでもうしわけありません。
エラーの確認用のHogeクラスでは省略していますが実際使おうとしている
クラスではprivate $filePathを持たせています。
引数無しでread()を呼んだ場合に$this->filePathのファイルを読み直します。

>コンストラクタで引数で渡してメンバ変数に代入したり
コンストラクタのなかでreadまでやるからreadのなかでメンバ変数に
代入するようにしているのですが、、コンストラクタ(ファイルパスのセット)と
read()は分けた方がいいのでしょうか。

>あるいはファイル名登録用のメソッドを作ったりしてもいいよね。
read()とファイルパスのセットを分けた方が良いのであればそうします。
どちらがよいのでしょうか。
0369nobodyさん2006/09/11(月) 15:31:35ID:9vOMCYca
PHPでformlから値を貰うときに$_POSTを使うのは分かるのですが、
$_POST["hoge"]=$_SESSION["mofu"]; みたいに直接代入という
方法ってプログラム上アリですか?無しですか?

この方法で確かにちゃんと動くけど明らかに使い方は間違ってるような
気がする($_POSTはformからのデータを貰う為のものと思っているから)
のです。
なぜこんなことをしたのかと言うと、前画面で入力したデータを
ターゲットのフォームに初めから入れておきたいが、ターゲット画面で
入力エラーを検知した場合は、そのエラーの箇所を空白にし、他の入力
箇所は保持したいのです。
ターゲット画面でsubmitをしたとき、呼び出される画面はターゲット画面で、
入力にエラーが無い場合はHeaderで次画面に飛ばすのです。


分かりにくい表現で恐縮ですが皆様の考えを教えてください。
0370nobodyさん2006/09/11(月) 16:05:42ID:???
普通にアリでしょ
0371nobodyさん2006/09/11(月) 17:08:12ID:???
>>369
$_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:9vOMCYca
正規表現でカタカナと数字以外の入力を禁止する処理を作りました。
if(ereg("[^0-9ア-ンー0-9]",$_POST["kanaName"])){
echo "全角カタカナと数字以外禁止";
}

しかしこれだとヤ以降(50音順)がカタカナと認識されません。
よい方法があったら御教授願います。
0375nobodyさん2006/09/11(月) 22:12:57ID:???
×御教授願います。
0376nobodyさん2006/09/12(火) 07:22:51ID:???
>>369
設計を根本的に見直そう。
$_POSTで受け取った値は必ずスクリプト内で
別の変数に代入してから計算なりアウトプットなりするクセをつける。

そんで、エラーを検知した場合は、最初の画面に戻して、
どういうエラーがあったのかを表示して再入力させるべき。
もちろんこの時、エラーがなかった項目については値を保持して、
フォームに既に入力されてる状態にしてあげること。
03773742006/09/12(火) 14:25:02ID:FIxGk3KG
>>375
何か問題でも?
教授=プロフェッサーだけじゃなくて知識等を与える事って意味もあるはず
だから知識を与えて欲しいと願うのはダメ?

それはさておき正規表現の問題が解決できません。
ア-ンーとしてあるのにガ等の濁点やァ等の拗音(だっけ)がマッチしたりしてます。
どうやったら解決できるでしょうか?
0378nobodyさん2006/09/12(火) 14:50:15ID:???
>>374,377
自分のレベルが糞より低い位置にあるんだから、バカに徹して頭を垂れているべきだ。
それが世渡りつーものだ。

で、そんなもん正規表現じゃねー!!恥ずかし過ぎ!つか、笑った。

もし、sjisなら片仮名文字は
\x83[\x40-\x96]

バカだから文字コードの事も考えていないよね?
仮名文字を使って正規表現とか言うのだから。
0379nobodyさん2006/09/12(火) 15:07:00ID:???
>>377
マジレスすると「ご教示」が正しい
0380nobodyさん2006/09/12(火) 15:07:49ID:???
> 仮名文字を使って正規表現とか言うのだから。

そこでmb_eregですよ!
03813742006/09/12(火) 15:10:12ID:FIxGk3KG
>>379
なるほど サンクス 今度からそうするよ。
0382nobodyさん2006/09/12(火) 15:19:09ID:???
他のアドバイスはスルーかよ
0383nobodyさん2006/09/12(火) 15:31:11ID:???
>>374のレベルだとご教示では足りんからご教授というのもあながち間違いではない気がする。
03843742006/09/12(火) 15:57:14ID:FIxGk3KG
>>378
実際に組むとき\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 正解。
03853822006/09/12(火) 16:12:37ID:???
>>384
いや、せかしてしまってすまない、早漏だった
動いておめでとう
0386nobodyさん2006/09/12(火) 16:18:19ID:???
>>384
オマエ、本物のバカだな基礎とか基本とか全部飛ばしているな
仮名文字を使うなつーてるのにバカだから使うし

$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:???
>>384
> 仮名文字を使うなつーてるのにバカだから使うし
http://www.php.net/manual/ja/function.mb-ereg.php

調べもしないで偉そうだなおい
0388nobodyさん2006/09/12(火) 16:31:23ID:???
アンカーミスだ
>>386
0389nobodyさん2006/09/12(火) 16:35:02ID:???
>>387
俺も宗教的な理由で仮名文字は使わないな
別におかしくないし、sjis環境なら使わないほうがいいし
それ以前にmbって・・・まーいいや。
0390nobodyさん2006/09/12(火) 17:21:45ID:???
>>386
まぁ超初心者用だし・・・。
これからに期待あげ
0391nobodyさん2006/09/12(火) 17:26:25ID:???
> それ以前にmbって・・・まーいいや。

そこが大事だろ!
おれみたいな初心者に教えてくれよ
0392nobodyさん2006/09/12(火) 17:45:06ID:???
>>391
本当に宗教的な理由としか言い表せないだろう
mdで仮名文字(2バイト文字)が使えるからと安易にいたければ使えばいいかと
もし、自分が宗教的な物に気付けばどこかで仮名文字は捨て去る事となるから
但し、生涯教えて君や初心者を通すなら気付かず使うことととなるだろう
それはそれで良いと思う。
0393nobodyさん2006/09/12(火) 17:47:41ID:???
日ry
03943912006/09/12(火) 17:59:17ID:???
>>392
プログラムコードには極力日本語を含まないようにしてる
理由は単純に気持ち悪いからだ
でも実際にどんな問題がはらんでるかが知りたい

・「マルチバイト」そのものがあまり信用できないからアスキーコードを使う
・PHPのmbまわりが信用ならない
・環境設定によって左右されるようなコードを書くべきでない

いろいろ考えてみた あたってたらそう言ってくれ
あたってなかったら調べてみたりするから
0395nobodyさん2006/09/12(火) 23:13:17ID:???
2バイト文字で問題・・・Windows上で文字コードEUCのスクリプト内で
日本語を含んだパスを指定して「ファイルが読めない。」と悩む私が昔
いました。
0396nobodyさん2006/09/13(水) 02:23:45ID:???
日本語の文字コードが乱立してるのがいけないんだ!!
RFCとかが統一すりゃいいんだ!

そしたら「宗教的」なヲタたちが啓蒙普及活動をしてくれる。
そしてプログラミングにおける日本語の問題も全て解決する。
0397nobodyさん2006/09/13(水) 04:18:32ID:???
宗教的確信を持って「無理」と思う
0398nobodyさん2006/09/13(水) 14:35:51ID:???
何のためのUNICODE
0399nobodyさん2006/09/13(水) 18:06:28ID:fd+xBvUi
pearをインストールしていますが、上手くバージョンアップできません。
参考にしたサイト
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と出るのは仕様ですか?
04003992006/09/13(水) 18:40:21ID:fd+xBvUi
PHPのバージョンをあげたら1.4.9になったのでこれで良しとします。
騒がせて巣万個
0401nobodyさん2006/09/13(水) 19:37:08ID:ny0rhUNk
よくやった
0402nobodyさん2006/09/13(水) 19:38:45ID:???
ははは
0403nobodyさん2006/09/13(水) 19:40:07ID:???
てst
0404nobodyさん2006/09/13(水) 20:15:13ID:qvwVE6Hq
質問です。

例えば
$a が 2ちゃんねる だったら、
あいうえお
かきくけこ
さしすせそ

$b が 3ちゃんねる だったら
いろはに
ほへと
ちりぬる

って表示するようにして、

$a=2ちゃんねる $b=3ちゃんねる だったら
あいうえお いろはに
かきくけこ ほへと
さしすせそ ちりぬる

と表示するようにしたいんですが、
どのようにすればいいでしょうか?
0405nobodyさん2006/09/13(水) 20:47:12ID:???
>>404
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:w1P9D6Nk
ヒント配列
0407nobodyさん2006/09/14(木) 13:39:34ID:RcWvZ0xR
Apache2.0.54
PHP5.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:???
PHPにwantarray(perl関数)と同じ物ってないですか?
探しているのですが、見あたらなくて
0410nobodyさん2006/09/14(木) 17:45:56ID:pPxPgU+d
PHPスレで質問していいのか迷いましたが・・・

<?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
PDOにもPEAR::DBの「autoExecute」みたいに
自動的にSQL文を組み立ててくれる機能はありますか?
0412nobodyさん2006/09/14(木) 20:07:25ID:???
> if($cmd!=null)
if($cmd!==null)
0413nobodyさん2006/09/14(木) 21:18:02ID:???
>>407
PEAR::Mailを使ったことがないので内部で処理してないとは言い切れないけど、
マルチバイト文字列(日本語とか)突っ込むときは、エンコーディングが必要なのでは?

あと、PEARに関する質問は
【PHP】PEAR Part2
http://pc8.2ch.net/test/read.cgi/php/1122899232/
がいいかな。
0414nobodyさん2006/09/15(金) 09:18:46ID:???
>>410
キミはシステムを乗っ取られたいのか?
0415nobodyさん2006/09/15(金) 11:24:29ID:???
>>410
ヘッダに返ってくるのは仕様です。
なんらおかしくありません。
0416nobodyさん2006/09/15(金) 18:42:11ID:???
>>410はヘッダ”しか”帰ってこないから困ってるんだろ。
ちなみに、それは、
Lengthだけじゃなくて
ContentType: application/x-www-form-urlencoded
を送信してないから。
これで、とりあえずは1と帰ってくるよ。
0417nobodyさん2006/09/16(土) 01:11:20ID:???
>>416
そうじゃなくて、>>410が求めてるのは単純にechoの結果(標準出力)だろ。
0418帰ってきた42歳2006/09/16(土) 01:15:26ID:yXjwnh9n
Smarty を使って フォームを作りましたが、config.phpの指定には、

m01 => 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に見えていました
0420nobodyさん2006/09/16(土) 19:47:58ID:???
サーバ"から"ファイルをPOSTでアップロードするコードを書いてるんですけど
うまくアップロードできません。

$handle = fopen ("fugahoge.tgz", "r");
while (!feof ($handle)) {
$buffer = fgets($handle, 4096);
$dataf.= $buffer;
}
fclose ($handle);

$curl = curl_init ($posturl);
curl_setopt ($curl, CURLOPT_POST, 1);
curl_setopt ($curl, CURLOPT_POSTFIELDS,"&filename=".urlencode($dataf));
curl_exec ($curl);
curl_close ($curl);
0421nobodyさん2006/09/16(土) 19:56:59ID:???
途中で投稿しちゃった。
こう書いたのですがうまくいきません。
おしえてください
0422nobodyさん2006/09/16(土) 21:34:41ID:???
>>420
PEARのHTTP_Requestをつかったら?
0423nobodyさん2006/09/17(日) 04:45:08ID:7OIeS9Or
echo "書き込み";
$fp = fopen('aaa.txt','w');
fwrite($fp,$f_raw);
fclose($fp);

こんな単純な書き込みなのですが、
何故かaaa.txtと言うファイルが書き出されません。
ルートディレクトリにもカレントディレクトリにもありません。
なにかphp.iniに設定すべき所があるのでしょうか?
それとも、プログラムミスなのでしょうか?
0424nobodyさん2006/09/17(日) 04:56:14ID:???
fopenに失敗した場合は、E_WARNING レベルのエラーが出る筈なんだが。
0425nobodyさん2006/09/17(日) 05:48:32ID:???
助けてください。。。
とある理由でPOSTで数M(10M以下)のデータを送り
fopen、fwriteで書き出しするプログラムなんですが・・・。
完了に2分以上掛かる上、UNIXマシンでtopコマンドうつとCPUは80%くらいを食っています。。。

こんなもんなんでしょうか?
転送自体はローカルでテストしてるんで、問題ないんですが・・・・。

それとも、メモリが少ない設定になってる為等でしょうか?
どちらにせよ。POSTされた数Mのデータを高速にファイルに書き出す方法を探しています。
よろしくお願いします。
0426nobodyさん2006/09/17(日) 06:07:51ID:???
http://ns1.php.gr.jp/pipermail/php-users/2004-April/021685.html

確かにたまにこういう書き込みを見る。
PHPのfopen()やfwrite()が遅いのは、やっぱしょうがないのかな・・・

#にしても、遅すぎだとは思うけど
0427えがみボンバイエイ2006/09/17(日) 07:08:51ID:???
<?php
require_once("XML/RSS.php");
$rss=new XML_RSS("http://manabekawori.cocolog-nifty.com/blog/index.rdf";);
$rss->parse();
?>
<h2><?php print(mb_convert_encoding( $rss->channels['title'],"EUC-JP","auto")); ?>
</h2>
<?php foreach($rss->items as $item){ ?>
<?php print(date(($item['dc:date']))) ?> <a href="<?php print($item['link']); ?>" target="_blank">
<?php print(mb_convert_encoding($item['title'],"EUC-JP","auto")); ?>
</a><br>
<?php }
?>


と書くと
2006-09-17JST00:41:11+09:00  夫婦別姓制度はまだなのか
2006-09-13JST22:46:23+09:00  おやすみ投稿か
2006-09-08JST00:08:49+09:00  カッチカチやぞ
2006-08-31JST22:40:11+09:00  エロかわ…?

言う風に表示されるのですが、
JST00:41:11+09:00の部分を削りたいのですが、
どうすれば宜しいか分かる方いらっしゃいましたら宜しければ教えていただけると幸いです。
0428nobodyさん2006/09/17(日) 13:55:08ID:???
explodeでJを指定して[0]をprintしてやればいいかも。
0429nobodyさん2006/09/17(日) 15:59:12ID:X/s21ZZr
すみません、Linux上でfindを実施してphpの拡張子がhitした場合に、
行頭に#!/usr/bin/php5を一括挿入するスクリプトを
作成したいと思いますが、どのように書けばよろしいでしょうか?

--スクリプト(パイプで渡せばいいと考えましたがこの先はどうした方がよいでしょうか?)
find * -name *.php |
0430nobodyさん2006/09/17(日) 17:19:12ID:???
こんな感じで出来なかったっけ?
出来なかったらゴメン
% php < `find * name php `
0431nobodyさん2006/09/18(月) 02:05:26ID:???
Sqliteで扱うデータで、デスク容量をカウントするのがあって
ギガとかになるので、バイト単位だと
1073741824B=1Gなので、INTEGERだと格納出来ません。
こういう用途だと、どうすればいいのでしょうか?
SQiteは型非依存だと聞いたのですが、型を指定しなければ良いと言う事でしょうか?
0432nobodyさん2006/09/18(月) 02:18:16ID:???
SQLiteスレ行けといいたい所だが、
バイト単位でだと、扱うのはあまり好ましくないから。
どうせギガレベルなら、メガ単位で管理すれば?
0433nobodyさん2006/09/18(月) 03:03:17ID:???
細かくデータ量を管理したいなら

class DataSize{
  private digitGigaByte;
  private digitMegaByte;
  private digitKiloByte;
  private digitByte;

/* 以下メソッド定義 */
};

とかやって自前のクラスと操作メソッド作ったほうがいいんでない?
0434nobodyさん2006/09/18(月) 05:50:35ID:0wioqDk7
質問です
mkdir('dir', '0600');
など、パーミッションを指定できるメソッドで作成したファイルやディレクトリが、この設定が反映されません。
具体的には、上の例の場合、411のパーミッションのdirと言うディレクトリが出来上がります。
何か設定すべきところがあるのでしょうか?
一切の書き込みが出来ないので、何も出来ません。。。
0435nobodyさん2006/09/18(月) 14:19:10ID:???
mkdir('dir', 0600);
だめだったらごめんね
0436nobodyさん2006/09/19(火) 01:37:52ID:???
空行を含んだファイルを

$fi = file("aaa.dat");

で読み込んでから、
空行を抜いて表示したりしたいのですが、
やりかたがわかりません。

for ($i=0;$i<9;$i++) {
if ($fi[$i] != "" ) { print "$fi[$i]<br>";}
}

「""」のところを「\n」で試したりしましたがだめでした。
どうすれば良いのでしょうか。
0437nobodyさん2006/09/19(火) 01:51:17ID:???
>>436
$fi = array_map('rtrim',file('aaa.dat'));
for ($i=0;$i<9;$i++) {
    if ($fi[$i] != "" ) { print "$fi[$i]<br>";}
}
0438nobodyさん2006/09/19(火) 05:24:38ID:???
っていうか、そういうメソッドがあったような・・・
0439nobodyさん2006/09/19(火) 05:45:57ID:???
>>436
$fi = file('aaa.dat');

foreach($fi as $value){
  if(trim($fi) == '') continue;
  出力処理
}

>>438
一々突っ込むほどのことではないかも知らんが、メソッドは一般にクラスのメンバ関数のことだと思うぞ。
0440nobodyさん2006/09/19(火) 05:46:44ID:???
if(trim($fi) == '') continue; → if(trim($value) == '') continue;

な、勿論。
0441nobodyさん2006/09/20(水) 09:19:03ID:HL0PU+Ol
質問お願いします。

MySQLに予め登録したテキストを呼び出してmb_send_mailで配信というのを
やりたいんですが、改行なしになってしまいます。
改行を入れたい所に\nを入れてDBに登録したんですが、うまくいきません。
何を使えば改行が入るでしょうか?
0442nobodyさん2006/09/20(水) 11:08:19ID:???
>>441
改行コードを<LF>に統一
0443nobodyさん2006/09/20(水) 14:42:19ID:HL0PU+Ol
>>442
PHPスクリプトの改行コードはLFに統一してるんですが、MySQLにも何か改行コードを
指定するんでしょうか?
04444422006/09/20(水) 15:00:36ID:???
>>443
以下のコードをmb_send_mailの直前に入れて試してごらん。
$bodyってのはメール本文ね。MySQLから取り出したテキストを$bodyに入れて。

$body = str_replace("\r\n", "\n", $body);
$body = str_replace("\r", "\n", $body);
0445nobodyさん2006/09/21(木) 14:53:07ID:???
クロスサイトスクリプティング対策についてなんですが、
掲示板を作るとして書き込むときに fwrite($datafile, "<pre>".$_POST['message']."</pre>"); 
としてみたらJAVASCRIPTも無効化されてるしいいような気がするんですが、<pre>で囲んだ程度ではやはり駄目でしょうか?
0446nobodyさん2006/09/21(木) 17:29:08ID:JVGPXujg
session_unset();
session_start();
と宣言しているページがあります。
ユーザにデータを入力させ、action=""としています。
$_POSTの内容は保持されて$_SESSIONの内容だけ削除というのは
標準の動きなのでしょうか?

確かに$_POSTの内容は残り、$_SESSIONの内容はクリアされているような
挙動はしているのですが、別の環境(作成はWinで稼動はLunuxとか)に持っていっても
同じように動くのでしょうか?
日本語が不自由っぽくて恐縮ですが教えてください。
0447nobodyさん2006/09/21(木) 17:53:38ID:???
>>445
文章に</pre>があったらどうなる?
0448nobodyさん2006/09/21(木) 23:39:17ID:???
>>445
XSSというのは実際にHTMLとして出力するときに問題になるのであって、
fwriteにはまったく関係ない。

そして専用の関数(htmlspecialcharsなど)があるんだからそれを使え。
0449nobodyさん2006/09/22(金) 00:25:57ID:???
>>446
環境変えても問題ないと思う

(Lunuxでググったら10,300件・・みんなtypoしまくってるんだなぁ・・・。)
0450nobodyさん2006/09/22(金) 00:35:07ID:7CvFXbdS
SQlite使ってるのですが
sqlite_escape_stringで"などクエリの作成時に問題の出る文字を\"に置き換えられているのですが
文字列をSQLiteで取り出す時も残ったままなので、\"の文字が表示されてしまいます。(出力先はブラウザではないので・・・)
これを戻そうと$res=str_replace('\"', '"', $res);こんな事をやりましたが、うまく行きません。
残ったままです。

どうにか戻す方法はないのでしょうか?
0451nobodyさん2006/09/22(金) 00:36:56ID:???
>>450
PDOのプレイスホルダを使う。
0452nobodyさん2006/09/22(金) 00:47:03ID:???
phpでmysqlのデータベースにアクセスするプログラムを作成したのですが、
以下のエラーが出ています。
Fatal error: Call to undefined function mysql_connect() in /usr/local/www/data-dist/index.php on line 9

このエラーは、おそらくmysqlで提供しているphp向けの関数mysql_connnectが
認識できていないのではないかと考えていまして、
おそらく、php側の設定の追加が必要だと思うのですが、
具体的に何をやればいいのでしょうか?

ちなみに環境は以下の通りです。

■OS
FreeBSD 5.4

■phpのバージョン
$ pkg_info | grep php
php5-5.0.3_2 PHP Scripting Language (Apache Module and CLI)

■mysqlのバージョン
$ pkg_info | grep mysql
mysql-client-4.1.10a Multithreaded SQL database (client)
mysql-server-4.1.10a Multithreaded SQL database (server)

よろしくお願い致します。
0453nobodyさん2006/09/22(金) 00:48:42ID:???
>>452
ビルドの時にMySQLの組み込みを指定したか。
0454nobodyさん2006/09/22(金) 05:28:38ID:???
FreeBSDなんだけど、
PHPのmail関数使うのに、ポート空ける必要ないよね?
昔Linuxでやった時は要らなかったはず・・・
何故か外部にメール遅れない・・・

ググったらその手の質問は多いのに、どこも解決策が書いてませんでした・・・。
0455nobodyさん2006/09/22(金) 05:30:35ID:???
>ググったらその手の質問は多いのに、どこも解決策が書いてませんでした・・・。

あるあるwww
横槍ばっかになるんだよな、mail使うヤツだとおせっかいが沸くからw

ちなみに、ググったなら気づいてると思うがsendmailの問題であってPHPの問題じゃないから
解決したいなら、該当スレ当たれ。


あと、メールサーバーへ接続しての送信なんだからポート開放は不要
厳密にはサーバーといっても、サーバークライアントモデルのクライアントの相当する機能だから。

0456nobodyさん 2006/09/23(土) 01:39:07ID:???
フォームから入力された値を確認ページに表示させ、
その後、送信ボタンでメール送信します。
確認ページでは、$_postデータにforeachでhtmlspecialchrasをかませ、
&などの文字がエンティティ化されるのはいいのですが、
メールで送った文字も&と表示されてしまいます。
メールでは&に戻して送りたいのですがどうすればよろしいでしょうか?
0457nobodyさん 2006/09/23(土) 02:02:39ID:???
メールで送った文字もアンド記号amp;と表示されてしまいます、です。
0458nobodyさん2006/09/23(土) 06:26:47ID:???
>>456
バカかお前は。
$_POST変数をそのまま丸ごとforeachでエスケープかけてるんなら
メールでもエスケープされたままになるのは当たり前だろ。

HTML表示用変数とメール原稿用変数を分けて、それぞれ$_POSTから格納しろ。
そしてそれぞれ適切な処理を施せ。
0459nobodyさん2006/09/23(土) 11:27:14ID:???
POSTの受信速度に影響が出そうな設定ってありますか?
同じスペック、同じバージョンのサーバーなのに、レンタルサーバーでは8Mのファイルの受信に8秒
一方自宅やその他の自分の設定したサーバーでは1分の状況です。
ローカルホストで実験しているので、回線の速度の問題ではないと思うので、何か設定でもあるのかと疑っています。
ApacheやLighttpdなど色んなサーバーに変えたりしても同じなので、PHP側の設定を疑っています。
0460nobodyさん2006/09/23(土) 11:30:56ID:???
>>425-426でも話出てるが、PHP5のPOSTは遅い。
ちなみにfopen()などファイルオープンではなく、POSTである。

ためしにPHP4にしてみ。
多分片方の速いってサーバーは4だろ。
うちもファイルのアップロード数十倍伸びて唖然としたクチ
0461nobodyさん2006/09/23(土) 17:44:50ID:???
>>459
両者のPHPやApacheのバージョンも書かないと。
0462nobodyさん2006/09/23(土) 19:49:02ID:???
初心者です。
POSTで、次のページに送って表示させると文字化けが。
両方のページをEUC-JPで保存してるのに何でですか?
mb_detect_encodingで、その送られた値を見ると、SJISになってしまっています。
教えてください。
■ このスレッドは過去ログ倉庫に格納されています