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

【PHP】下らねぇ質問はここに書き込みやがれpart14

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/12/18(日) 10:10:12ID:???
PHPに関するくだらねぇ質問用スレです。
ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
過去スレは>>2
0751nobodyさん2006/01/08(日) 01:31:01ID:Gpu+sfrF
>>750
ありがとうございます。
mb_send_mailなどは使えるようですね。

またいろいろ調べてみたら、ソースの頭に
#! /usr/local/bin/php
などのパスが必要な場合などあるなどを見ました。

以前のレンタルサーバではサンプルソースなど色々
情報が載っていたので初心者の私でもなんとかなったんですが
今回のレンタルサーバにはPHPは使用可能。
とはあるですが、上記のようなパスの設定が必要なのか?パーミッションの設定は?
などは特に説明がありません。

基本を勉強しないとダメですね・・
とにかく>>750さん
ありがとうございます。





0752nobodyさん2006/01/08(日) 01:44:03ID:???
HTTPが理解できないやつはPEARを使えばいいと思う。
0753nobodyさん2006/01/08(日) 01:55:00ID:???
>>752
長距離パスすぎてどれのことか分からん。レスアンカーくらいつけてくれ。
0754nobodyさん2006/01/08(日) 05:03:26ID:???
携帯向けにjpgファイルをリサイズして出力するスクリプトを書いています。
指定したサイズより大きい画像をリサイズする処理は完成しているのですが、
それ以下のサイズの画像もimagejpeg()の段階で画像が劣化してしまいます。
何かうまく回避する方法はないでしょうか?
0755nobodyさん2006/01/08(日) 05:06:33ID:???
>>754
劣化させなたくなかったらリサイズしなければいいじゃない
0756nobodyさん2006/01/08(日) 05:11:17ID:???
>>754
サイズを判定して処理不要ならそのまま出力すれば?
07577542006/01/08(日) 05:20:48ID:???
>755,756
ありがとうございます。

サイズ判定はやっています。
ブラウザにjpgを出力するにはimagejpeg()使う以外に無いですよね?
私の勘違いでしょうか?

>そのまま出力する
とは画像ファイルにリダイレクトするということでしょうか?
なるべくなら、それは避けたいのです。
0758nobodyさん2006/01/08(日) 05:40:18ID:???
んー。readfile()とかfpassthru()とかfread()+fwrite()とか。
バイナリで出力できるやつならなんだって構わないと思うんだけど。
07597542006/01/08(日) 05:48:57ID:???
ありがとうございます。解決できそうです。
画像処理にばかり気を取られて頭が固くなってました。
0760nobodyさん2006/01/08(日) 10:47:15ID:???
>>748
mb_ereg ってこと?
まぁ出所違うからね。そういう判断もできるかも。
0761nobodyさん2006/01/08(日) 15:05:00ID:???
ハッスルサーバーかりて、

<html>
<head>
<title>SaveCookie</title>
<?php
mb_language('Japanese');
mb_detect_order('sjis-win,eucjp-win');
mb_internal_encoding("UTF-8");
?>
</head>
<body>
<?php setcookie("email",$_POST['email'],time()+(60*60*24*90)); ?>
SAVED COOKIE "email"
</body>
</html>

を表示してみたところ下のようなメッセージが返ってきたなり。

Warning: Cannot modify header information - headers already sent by
(output started at /home/happylife/public/www/cookie_rec.php:4)
in /home/happylife/public/www/cookie_rec.php on line 13
SAVED COOKIE "email"

セキュリティの設定をすべてのクッキーを有効にしても、
ファイヤーウオールを無効にしてもこのメッセージが出続けます。

どうしたら良いのでしょう?
0762nobodyさん2006/01/08(日) 15:10:32ID:???
[俺サマ訳]
警告: (HTTP)ヘッダー情報を修正することができません
- だって、ヘッダーは既に送信されていたんだもん。
0763nobodyさん2006/01/08(日) 15:16:20ID:???
>>761
setcookieは、"<?php"の前に何かがあっては送信できませんし、
setcookieより前にecho等があっても送信できません。

"<?php"の前は、たとえ空行でも、入れちゃだめよ。
0764nobodyさん2006/01/08(日) 21:57:56ID:???
>762,763

ありがとうございます。
動きました♪
0765nobodyさん2006/01/08(日) 22:37:56ID:???
$fp = fopen("hoge.txt", "r+");
flock($fp, LOCK_EX);
こんな感じでファイルロックを行うと、ファイルをオープンしてからロックするまでの間に他のプロセスがファイルをオープンすることはないのでしょうか?
0766nobodyさん2006/01/08(日) 22:41:05ID:???
>>765
ある
0767nobodyさん2006/01/08(日) 22:55:29ID:???
>>765
>ファイルをオープンしてからロックするまでの間
どんな一瞬だよw
0768nobodyさん2006/01/08(日) 23:12:10ID:???
DBに頼りすぎてファイルロックの基礎も分かってない素人が多すぎだよね >PHP開発者
0769nobodyさん2006/01/08(日) 23:15:37ID:???
オープンされてもロックが取得できなきゃいい
というか、意外とまともに説明されてることって少なくね? < flock
07707652006/01/08(日) 23:30:43ID:???
hoge.txtを毎回書き換える場合(カウンターなど)これだとまずいですよね。
ロック用のファイルを作っておいてそれをロックするようにすればいいでしょうか?
0771nobodyさん2006/01/08(日) 23:34:36ID:???
'w' で fopen しちゃうとアウトだね
0772nobodyさん2006/01/08(日) 23:48:15ID:???
強固なflockのサンプルコード

↓よろ
0773nobodyさん2006/01/08(日) 23:51:54ID:???
>>770
パターン的には2通り。
1つは複数のプロセスでopenはできることを前提に、flockが解除されて
順番が回ってきたプロセスは「まずrewindして中身を読み直す」ことから始める。
ファイルのオープンモードがw系以外であることが条件。
もう1つは対象ファイル以外にロック専用のファイルを用意しといて
それがロック中は以降の処理全体を止める。いわゆるプロセスロック。
ファイルをいきなり消しちゃう場合や、複数のファイルを扱う場合などはこれ。

この種の「ロックの粒度」の話はRDBMSの試験にも出ますよw
0774nobodyさん2006/01/09(月) 00:01:04ID:???
まぁ細かいこと考えずに安心したいっつーんならロックファイルを用意
するのがいちばんやね。ファイルが増えて邪魔くさいって欠点はあるけど
07757652006/01/09(月) 00:08:16ID:???
>>773
rewindするとオープンした後に書き換えられたデータも読めるんですか?
0776nobodyさん2006/01/09(月) 00:08:18ID:???
1分置きにクーロンで破損検査すれば解決
0777nobodyさん2006/01/09(月) 00:15:19ID:???
rewind しなくても読めるよ
rewind が何をするものなのか考えてみよう
0778nobodyさん2006/01/09(月) 00:20:19ID:???
他のプロセスに書き換えられた場合ポインタの位置がずれているからですか。
0779nobodyさん2006/01/09(月) 00:21:50ID:???
>>778は>>765です
0780php developer teams2006/01/09(月) 13:07:16ID:r4dXJ2hk
DBに書き込む際、改行(enterでの)が \n となってしまい、PHPで実際に表示してみると改行できていないのです。

どうすれば改行できるようになるのでしょうか?
0781nobodyさん2006/01/09(月) 13:09:17ID:???
>>780
つ nl2br
0782nobodyさん2006/01/09(月) 18:06:26ID:???
file()を使えば、1行目を[0]に、2行目を[1]に入れることが出来ますが、
[0]にfile()で読み込んだソース全部を入れることは出来ないんでしょうか?
0783nobodyさん2006/01/09(月) 18:12:36ID:???
>>782
file_get_contents使えよ
0784nobodyさん2006/01/09(月) 18:15:21ID:???
>>782
>>783のでいいと思うがPHPのバージョンが古くて(4.2.x以前)使えない場合は
join("",file(〜))で同じことができる。(が、file_get_contents()の方が速い)
0785nobodyさん2006/01/09(月) 18:16:35ID:???
>>780
それ、別にDB関係ないし。
改行と<br>の区別くらいつけろ。
0786nobodyさん2006/01/09(月) 18:33:38ID:???
>>783-784
トンクスです
0787nobodyさん2006/01/09(月) 18:46:35ID:???
マニュアルにもあるけど
fopen して fread( filehandle, filesize( filename ) )
って手もあるな
0788nobodyさん2006/01/09(月) 20:03:42ID:???
a
は1バイトですが、
あ
は3バイトですか?
0789nobodyさん2006/01/09(月) 20:13:30ID:???
あ
は
あ
は
0790nobodyさん2006/01/09(月) 20:13:49ID:???
>>788
「あ」もそうですが「a」も 文字エンコードによって変わります。
0791nobodyさん2006/01/09(月) 20:15:04ID:???
>>790
あっ、なるほど
謎が解けました。ありがとです
0792nobodyさん2006/01/09(月) 22:34:46ID:+5WHmeqf
もし\が2個以上重なっていたら(\\) ひとつ省き\と、又\\\\となっていたら\\\を省きひとつにと\がひとつ以上の場合はすべてひとつに変換するようにしたいのですがうまくPHPでプログラムを組めません。

どなたか簡単なプログラムを作成してください。お願いします。
0793nobodyさん2006/01/09(月) 23:12:01ID:???
>>792
preg_replaceで正規表現を使うのが筋だが、嫌なら
$str = stripslashes($str); とか

つか少し頭使うなり調べるなりせんと上達しないよ?
0794nobodyさん2006/01/09(月) 23:26:06ID:???
みなさんはワンタイムチケットの実装をどうしてますか?

HTML_QuickFormを利用していますが、なんか面倒で。
07957232006/01/10(火) 12:55:21ID:s2ru7jHC
>>724-725
遅くなってすいません、ありがとうございました。
0796nobodyさん2006/01/10(火) 13:11:23ID:???
自宅鯖ではなく、レンタルサーバを利用しています。

一つのディレクトリに納まっている複数のファイルをまとめ、一つのファイルにし、
これを圧縮するにはどうしたら良いのでしょうか。

圧縮はさておきまとめるというとtarを使うと思うのですが、
 $aaa = system('tar -cf ./after.tar ./before', $bbb);
なんてことをしてもできないようなのです。
system関数が使えないとなると、他に手はないでしょうか。
0797nobodyさん2006/01/10(火) 13:55:20ID:???
レンタルサーバー、レンタルサーバー言うやつは、どこか晒せよ。
特にさくらの鯖とか、CGI版だって知らないで聞いてるアホも多いんだから。

「system関数が使えない」ってのは、「関数が」使えないの?
それとも、`ls`なんかは出来るわけ?

パスが通ってない可能性も踏まえ、which tarしたフルパスにするとかしてみれ。
tarが使えないようになっている以外なら多分出来るはずだ。
07986752006/01/10(火) 15:23:09ID:???
>>675
簡単に分からない問題なのか、それとも初歩過ぎてレスがつかないのか…
0799nobodyさん2006/01/10(火) 15:34:18ID:???
要素が大杉

var $str1 なんだから本来 $str1 と比較してマッチするはずがない
ereg に日本語を突っ込んでも信用できない
スクリプトを sjis で書いてると他にもおかしなこと起きやすい

以上から、たぶん晒した以外のところもかなりおかしなことになってるはず

結論としてはもっと勉強してくれ
0800nobodyさん2006/01/10(火) 16:04:59ID:hzjvsGhO
$2cht = preg_replace("/\\\\+\/","",$2ch);こういった使い方は可能でしょうか?

\が1つ以上ある場合はすべて消去したいのですがエラーが表示され機能してくれません。
0801nobodyさん2006/01/10(火) 16:08:12ID:???
>>798
判断に迷う質問だから放置してた。
ふつーに考えたら$str1と$this->str1を入れ替えるなんてこと自体がありえないので、
一体何をやろうとして何に引っかかってしまったんだか想像がつかない感じ。

結論:かなり大ボケかましてない?

というか多分、$this->str1は中身が空っぽになってて、
それで何にでもマッチしちゃうだけじゃないの?という気がする。
0802nobodyさん2006/01/10(火) 16:09:17ID:???
>>800
"/\\\\+\/" は "/\\\\+/" の間違いじゃないのか。
最後の \ は何に対しての \ なんだよ。
0803nobodyさん2006/01/10(火) 16:24:04ID:???
>>798
ありえないというか意味不明でレスのつけようがない
<?php
class test {
var $str1 = "テスト";
function view($str1) {
echo "\$this->str1=".$this->str1;
echo "<br>\n";
echo "\$str1=".$str1;
}
}
$a = new test;
$a->view("ホゲ");
?>
0804nobodyさん2006/01/10(火) 16:55:37ID:Gn5rV4CT
mysql_escape_stringでエスケープした文字を元に戻す関数とかありますか?

\と入力すると\\になったりして入力と異なるのでそれを直したいです。
0805nobodyさん2006/01/10(火) 17:29:27ID:???
>>797
申し訳ございません。XREAにてmod_phpで動かしています。

仰るとおり $aaa = system('which tar', $bbb); を試みましたが、
>>796のコード同様、$bbbには127という値が入っているのみでした。
0806nobodyさん2006/01/10(火) 17:55:04ID:???
>>804
入力元をコピーして残しとけば?
普通、mysql_escape_stringなんてDBに書き込む直前以外には実行しないだろー
0807nobodyさん2006/01/10(火) 17:55:41ID:???
マニュアルを読むんだ
0808nobodyさん2006/01/10(火) 18:38:31ID:???
>>796
さくっとPEAR使ったら?
http://pear.php.net/package/PHP_Archive/
http://pear.php.net/package/Archive_Tar/
圧縮は要lib
0809nobodyさん2006/01/10(火) 19:06:48ID:???
>>800
数字で始まる変数
0810nobodyさん2006/01/10(火) 21:52:48ID:???
>>808
Pearなどを使うのは初めてでしたが、適当にいじってるうちに成功しました。
ありがとうございました。
0811nobodyさん2006/01/10(火) 21:57:13ID:Gn5rV4CT
Wikiみたいに[ほげ[http://hoge.vom/]]と入力されたら<a href="http://hoge.vom">ほげ</a>と変換するにはどうしたらいいのでしょうか?
0812nobodyさん2006/01/10(火) 22:02:39ID:???
Wikiを入れる
0813nobodyさん2006/01/10(火) 22:20:29ID:V6LwtE82
Winの最新IEで試したのですが、
setcookie()する場合、適用ドメインを「.example.com」で発行すると、
それを「hoge.example.com」で上書きすることはできないんですね?
逆は可能なようですが・・・。
この仕様?って普通の感覚とは逆な気がするのですが、どんなもんでしょう?
08148132006/01/10(火) 22:27:18ID:???
どうもPHPの方が変な気がしてきました。
ブラウザが、「.example.com」と「hoge.example.com」
でクッキーを持っていると、
PHPの$_COOKIEは「.example.com」の方を優先して読み込むようです。
0815nobodyさん2006/01/10(火) 22:46:58ID:???
PHPでブラウザが送ってきたHTTPヘッダを見ることはできますか?
0816nobodyさん2006/01/10(火) 22:54:11ID:???
module版なら、apache_request_headers()で取得できるよ。
0817nobodyさん2006/01/10(火) 23:29:28ID:???
>>816
どうもありがとう!!

>>814-815 の続きですが、IEで調べたところ、
「example.com」と「hoge.example.com」で同じ名前のCookieがある時、
hoge.example.com にアクセスすると、
IEは、「example.com」のクッキー、「hoge.example.com」のクッキーの
順番で同時に送信してくるようです。
これをPHPの$_COOKIE['XXX']で取得すると、「example.com」の方の
クッキーが返されます。

広域指定が局所指定よりも優先されているわけですが、
これってクッキーの仕様に合致しているのかなぁ…。
0818nobodyさん2006/01/11(水) 00:00:43ID:???
PHPって、どのくらい勉強すればいいんかねぇ。
0819nobodyさん2006/01/11(水) 00:02:19ID:fOyKkotG
>>801
>>803
レスありがとうございます。

確かにちょっと状況が説明不足ですね。

実は、レッツPHP!にあるTree BBS
http://php.s3.to/bbs/bbs6.php
に書き込み禁止処理を追加しようと思ったのです。
$comに納められたコメントの内容にNGワードが
入っていたらエラーが出るようにしようとしました。

それで最初
if(eregi($bad_word, $com))
としたのですが、うまくいかなくて

if(eregi($this->bad_word, $com))
または
if(mb_eregi($bad_word, $com))

にしたら、うまく動いたんです。ちゃんと動いているので
中身空っぽになって何でもマッチしているわけではないようです。

なお、このif分を追加したのは、function add_chkの中の
ifがずらっと並んでいるところです。

最初からスクリプト中にある
if($com=="" || ereg("^( | |[¥r¥n])*$",$com))
というところは、そのままで全角スペースにちゃんと
マッチしているので、ますますわけがわかないのです。
なので、もしかしたら文字エンコーディングに起因する問題?とか
いろいろ考えたのですがよくわかりません…。
0820nobodyさん2006/01/11(水) 07:42:19ID:???
>>819
スクリプトの先頭に
ini_set("display_errors", 1);
error_reporting(E_ALL);
と書け。

if(mb_eregi($bad_word, $com))
は$bad_wordが未定義なのにうまくいくはずない。
0821nobodyさん2006/01/11(水) 09:29:54ID:???
>>804
エスパー的には、mysql_escape_stringの問題ではなく、
マジッククォートの問題だと思う。
つ php.ini

初心者は問題の本質を捕らえる努力と伝える努力をすべきだと思う。
0822nobodyさん2006/01/11(水) 10:32:50ID:???
ま、それができたら最初からバグ出してないと思うがなw
0823nobodyさん2006/01/11(水) 12:26:46ID:???

for ($i = 0; $i < $max; $i++)

より

for ($i = $max; $i > 0; $i--)

の方が早いって聞いたんですけどマジですか?
0824nobodyさん2006/01/11(水) 12:29:42ID:???
早いのは
for($i = $max; $i ; -- $i)
じゃないのか?
でも微々たるもんだと思うけどね。
0825nobodyさん2006/01/11(水) 12:50:14ID:???
>>823
試せばすぐわかることじゃん
08268242006/01/11(水) 12:59:20ID:???
試してみた。
1.for($i = 0; $i < $max; $i ++) {print ""}
と
2.for($i = $max; $i > 0; $i --) {print ""}
と
3.for($i = $max; $i; -- $i) {print ""}
をそれぞれ$max=1000000;で実行した結果、
おおよそ
1.0.50〜0.52秒
2.0.39〜0.40秒
3.0.31〜0.32秒
という結果になった。(複数回、順番入れ替えも行った上での結果)
環境:WinXP PHP4.3.10 CLI版

おまけ。
4.for($i = 0; $i < 1000000; $i ++) {print ""}
にするだけで
4.0.39秒
になる。
…PHPの変数参照っておせー
0827nobodyさん2006/01/11(水) 13:22:09ID:???
PHP書くのにお勧めにエディタおしえて
0828nobodyさん2006/01/11(水) 13:40:48ID:???
>>827
エディタスレ、開発環境スレへどうぞ
0829nobodyさん2006/01/11(水) 13:43:51ID:???
>>826
4 と 1 の違いが分からない
他の言語と比べてくれなきゃ PHP が遅いのか分からない
0830nobodyさん2006/01/11(水) 13:51:56ID:???
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/OptCompareZero.html
0831nobodyさん2006/01/11(水) 14:17:54ID:???
>>829
あれで分からないなら気にスンナ
0832nobodyさん2006/01/11(水) 14:22:10ID:h33/EqTj
データベース内にあるデータを消去するスクリプトを作成したいんだけど普通にdelet from ... を使ってアクセスすると
確認もないままに消してしまう。

同じスクリプト内に消去するまえの確認メッセージを表示してOKボタンをクリックした場合のみ消去させるにはどうしたらいいのでしょうか?
0833nobodyさん2006/01/11(水) 14:27:23ID:qDYFXRNq
最近の釣りは豪快だね
0834nobodyさん2006/01/11(水) 14:29:52ID:???
>>832
OKボタンのFORM入力が無ければOKボタンを表示して終了、
FORM入力があれば実際にdelete実行、ってだけ。
0835nobodyさん2006/01/11(水) 15:19:07ID:???
二次元配列で
$aa[0][0] = 1;
などとCみたいに扱えないんですか?
0836nobodyさん2006/01/11(水) 15:23:44ID:???
>>835
普通にできるが?
0837nobodyさん2006/01/11(水) 15:32:16ID:???
え、まじですか?
$aa[0][0] = 1;
として、これの中身を
echo "$aa[0][0]";とかすると
1[0]
って表示されるのですが・・
表示方法がまずいとか?
0838nobodyさん2006/01/11(水) 15:37:00ID:???
あ、できてますねこれ。
どうやら表示方法がまずかったみたいな
$aa[0][0]をいったん別の変数にとって
$bb = $aa[0][0];
として、$bbを表示したらうまくいきました。
0839nobodyさん2006/01/11(水) 15:40:09ID:???
>>837
"〜"の中で添え字([〜])やメンバ変数参照(->)みたいな記述はそのままでは使えない。
"{$env[0][1]}" みたいに {} で括る必要あり。

参考
【PHP】質問スレッドpart32【php】
http://pc8.2ch.net/test/read.cgi/php/1136276300/4
0840nobodyさん2006/01/11(水) 15:40:29ID:???
>>838
echo $aa[0][0];
echo "{$aa[0][0]}";
0841nobodyさん2006/01/11(水) 15:50:27ID:CQ4aDWhi
http://www.hero.ne.jp/~db/herodb.shtml
このデータベース型CGIを
http://www.breeze.jp/s02_faq_01.php#q23
ここに設置しようと思っています

$datpath = "./";
$binpath = "./";
$BinUrl = "http://www.***.com/~user/";
↑
これらの変更すべき部分に何を書けばいいのかよく分かりません
どなたかお願いします
0842nobodyさん2006/01/11(水) 15:53:01ID:???
>>841
スレ違い
08436752006/01/11(水) 16:06:44ID:???
>>820
おー、理解しました(多分)。スコープの問題?

if(mb_eregi($bad_word, $com))
が動いていたような気がするのは気のせいですよね、きっと…。
0844nobodyさん2006/01/11(水) 16:07:55ID:???
>>841
842の言うとおりだが、
何より
http://www.hero.ne.jp/~db/herodb-othersite.shtml
に説明が書いてあるだろ。
それで分からないなら使わない方がいいだろう。
0845nobodyさん2006/01/11(水) 16:09:09ID:???
>>843
if文の前に
echo $bad_word;
echo $com;
とでもして変数の中身確認すれば分かることでは?
0846nobodyさん2006/01/11(水) 16:14:50ID:CQ4aDWhi
>>842,844
またスレ違いでしたか;;
失礼しました
他をあたります
レスありがとうございました
0847nobodyさん2006/01/11(水) 17:22:57ID:???
>>839-840
激しくありがとう!!!
なるほど!それで謎がとけたきがします
0848nobodyさん2006/01/11(水) 18:08:12ID:h33/EqTj
PHPで文字化けします。いろいろ調べたのですがShift-JISを使わないと文字化けしないと分かりました。

しかし意味が分かりません。Shift-JISを使わないってどこをどうすればいいのですか?
0849nobodyさん2006/01/11(水) 18:11:15ID:???
適切な文字コードを指定すればいいのですよあえr4ん6j34kl
0850nobodyさん2006/01/11(水) 18:25:34ID:h33/EqTj
指定方法を教えてください。Plz
0851nobodyさん2006/01/11(水) 18:38:15ID:???
meta タグや htaccess を使うのでおおっと板違いだぁ
■ このスレッドは過去ログ倉庫に格納されています