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

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

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

PHP Home Page
http://www.php.net/
http://jp.php.net/

---前スレのテンプレここまで---

前スレ: くだすれPHP(超初心者用)2
http://pc11.2ch.net/test/read.cgi/php/1164617202/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 57
http://pc11.2ch.net/test/read.cgi/php/1193062236/
△▲ WebProg 初心者の質問 Part16 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1187729623/

完走したら、雑談スレで待機でどうでしょう
【総合】 Webprog板質問雑談スレッド 1
http://pc11.2ch.net/test/read.cgi/php/1131016915/
0002nobodyさん2007/10/25(木) 16:05:30ID:???
前スレみてたら、これが面白そうだったので、これもはっとく
PHPプロ!PHP講座
ttp://www.phppro.jp/school/phpschool/


では、ドゾー
0003nobodyさん2007/10/26(金) 01:14:43ID:???
PHPって言語としていまいちだよな
ほかに無料Webスペースで使えるスクリプト言語が少ないっていう程度
Perlよりわかりやすい言語っていう程度
変な言語仕様だ

即死回避
0004nobodyさん2007/10/26(金) 01:15:22ID:???
変ってどの辺が?
0005nobodyさん2007/10/27(土) 00:52:57ID:???
無理してPerl覚えたのにもっと簡単でいいものが出来るPHPで周りのやつが楽してるんで、嫉妬してるんだなww
0006nobodyさん2007/10/29(月) 21:43:11ID:???
下のような戻り値が配列の関数があった時、

function hoge(){
 $a = array("X", "Y");
 return($a);
}

戻り値の 配列の要素にアクセスする場合に、戻り値を一旦変数に入れるのではなく直接参照することは出来ませんでしょうか。

$r = hoge();
print($r[0]);

hoge()[0] //<-- こんなようなこと出来ない?
0007nobodyさん2007/10/29(月) 22:06:52ID:???
それが出来ないのがPHPなんだよね
0008nobodyさん2007/10/29(月) 22:51:03ID:???
できないね。リスト系の言語やPerlあたりから流れてきた人は必ず一回は躓く所だね。
0009nobodyさん2007/10/29(月) 23:26:14ID:???
rubyでもpythonでもjavascriptでも出来るのに
0010nobodyさん2007/10/30(火) 01:25:10ID:???
まぁ1行くらいケチらずに入れろや
0011nobodyさん2007/10/31(水) 06:13:37ID:???
input.phpにユーザーがアクセスしてそこにあるフォームに何か入力して
Submitボタンを押すと入力した内容が含まれたtxtファイルのダウンロードが始まる
というようなサイトを作りたいのですがphpで可能ですか?
当り前っちゃ当り前なのかもですがprint関数で試してもファイルを保存ではなく
中身がブラウザに表示されてしまいそれを手動で保存してもらわないといけないので
そこをなんとかしたいです。
0012nobodyさん2007/10/31(水) 06:35:32ID:???
>>11
http://jp2.php.net/header
0013nobodyさん2007/10/31(水) 10:07:47ID:???
>>12
ありがとうございます頑張ってみます
0014nobodyさん2007/11/01(木) 18:50:02ID:???
image関数について質問です。

画像の左右5pxに黒い背景をつけたいのですが
どのようにすればいいのでしょうか?

黒の画像と合成してみましたが画像の端が消えてしまいました。
0015nobodyさん2007/11/01(木) 19:12:21ID:???
キャンバスを10px*10pxでかくすれ
0016nobodyさん2007/11/02(金) 12:05:48ID:???
strip_tagはタグ取り除いてしまうんだが
指定したタグをそのまま残して他はhtmlspecialcharsみたいに
そのまま表示をしたい。

そんな関数ある?
0017nobodyさん2007/11/02(金) 18:54:00ID:???
>>16
strip_tags
0018nobodyさん2007/11/03(土) 11:41:40ID:???
フォームから入力した特定の文字が化けます。
例えば「☆」だと化けませんが「☆あ」だと「?#63908;」みたいに化けます。
なぜですか。
0019nobodyさん2007/11/03(土) 13:38:29ID:???
文字コードのせい
0020nobodyさん2007/11/03(土) 16:38:34ID:GrGF3a3n
こっちあげとくか
0021nobodyさん2007/11/03(土) 18:39:13ID:???
PHPでオブジェクトの型を指定したいんだけど。Javaでいう

gattai(Human ore, Human anata) {
return ore.gattai(anata);
}

みたいな?

こういうことやるためには

HumanクラスにgetTypeメソッド

public function getType() {
return "Human";
}

を実装

function gattai($ore, $anata) {
if(is_Human($ore) && is_Human($anata)) {
return $ore->gattai($anata);
} else {
throw Exception();
}
}

function is_Human($human) {
return $human->getType() == "Human" ? true : false;
}

とでもしないと駄目なんかね。
0022nobodyさん2007/11/03(土) 18:51:02ID:EkQ97k6r
parser errorについて質問です。
メールフォームを作ったんですが、なぜか入力確認画面の表示のところでparser errorが出てしまいます。

# エラーが出ているところ
<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="ja" lang="ja">

# それより上の部分
function check_html(){
global $homeurl,$title;
if(NAME_FLG){
$name_chk = MARK;
}
if(EMAIL_FLG){
$email_chk = MARK;
}
if(COMMENT_FLG){
$comment_chk = MARK;
}
if($_POST['copy'] == "on"){
$copy_flg = "E-mailで受信する";
}else{
$copy_flg = "E-mailで受信しない";
}
?>
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>

以上ですよろしくお願いします。
0023nobodyさん2007/11/03(土) 18:54:53ID:???
>>21
駄目でないよ
>>22
short_open_tagをoffに
0024nobodyさん2007/11/03(土) 18:55:29ID:???
コメントの/*と*/を使ってエラーが出てるとこを特定しろ
0025nobodyさん2007/11/03(土) 18:58:57ID:UiuKYuS+
DBなしの携帯用シンプル掲示板をサンプルデータを使って勉強中です

デザインとロジックを分けて作ってあるのですが
デザインのhtmlファイル内の各所に
{rval hr} とか index.php?{rval param} のように
{rval --} とあります。

htmlファイル内にphpを埋め込む際は下記のような記述が基本だと思っていたのですが、くくられていなかったりaltタグの中に入っていたりします。これはどういうことでしょうか?
<?php

?>
0026nobodyさん2007/11/03(土) 19:05:47ID:???
テンプレエンジン使ってんじゃねぇの?
まぁ自力でも置換できるけど
0027nobodyさん2007/11/03(土) 19:06:47ID:EzkHevL1
ここに書くか。
【PHP】下らねぇ質問はここに書き込みやがれ 58 立ててくる。
0028nobodyさん2007/11/03(土) 19:11:31ID:???
乙って漢字は下の土台部分がどっしりした感じがいいよな
0029nobodyさん2007/11/03(土) 19:15:50ID:???
お待たせしました。
「下らねぇ〜」がない間、ここに居候させてもらってた皆さんは移動。

【PHP】下らねぇ質問はここに書き込みやがれ 58
http://pc11.2ch.net/test/read.cgi/php/1194084457/
0030nobodyさん2007/11/03(土) 19:18:03ID:???
>>21
まったく同じように機能するわけじゃないけどね
http://jp2.php.net/language.oop5.typehinting
0031nobodyさん2007/11/03(土) 20:43:13ID:???
>>30
不勉強でした、一応あるんですね・・・。
その辺読んでみます。
0032超初心者2007/11/05(月) 18:43:22ID:s8UgZp9y
php勉強中です
カウンターを造るところで一つ疑問点が
<?php
$fp = fopen("count.txt", "r+");
$iCount = fgets($fp, 64);
flock($fp, 2);
fseek($fp, 0);
$iCount++;
fputs($fp, $iCount);
fclose($fp);
print $iCount;
?>
だとカウントがあがらない
$iCount++;を$iCount = $iCount + 1;にするとカウントがあがります。
$iCount++;が効かないのかと思いましたが
違うスクリプトで
<?php
$filename = "count.dat";
$file = fopen($filename, "r+");
flock($file,2);
$count = fread($file, filesize($filename));
$count++;
print "$count";
rewind($file);
fwrite($file, $count);
flock($file,3);
fclose($file);
?>
これだとカウントが上がります
どなたか説明していただけないでしょうか
0033nobodyさん2007/11/05(月) 18:49:38ID:???
>>32
やってみたら上のスクリプトでも上がったよ。
0034nobodyさん2007/11/05(月) 18:57:07ID:???
デバッグは変数を var_dump() して中身を見る、というのが基本
$iCount++; の動作がおかしいと思ったら、その前後で変数を調べてみればいい

おそらく $iCount に余計なスペースが含まれているのが原因
$i = "1 "; の場合、$i++ ではカウントアップしないが、$i = $i+1; では増加する

あと、flockのタイミングに問題があるのでファイルロックについても一般的なお勉強が必要と思う
0035超初心者2007/11/05(月) 19:13:14ID:Sif87GT6
32です
やっぱり家のは上がらないです。
0036nobodyさん2007/11/05(月) 19:14:52ID:???
そうか
0037nobodyさん2007/11/05(月) 19:18:07ID:???
ID違うしw
0038nobodyさん2007/11/05(月) 19:21:01ID:???
ちなみに俺は両方上がらなかった。 PHP5.1.6
原因は>>34と似たようなもんだったけど。
同じソースのはずなのにどこの違いで
みんなの結果が違うのかが気になる。
0039nobodyさん2007/11/05(月) 19:39:54ID:???
俺は最初にログファイルに0書いてからやったけど
0040nobodyさん2007/11/05(月) 19:46:08ID:???
>>39
俺のはログファイルを作ったときに数字の後に改行が入ってしまったから
カウントされなかったのかもしれない
0041超初心者2007/11/06(火) 16:36:17ID:blXO/asx
報告します
<?php
$fp = fopen("count.txt", "r+");
$iCount = fgets($fp, 64);
flock($fp, 2);
fseek($fp, 0);
$iCount++;
fputs($fp, $iCount);
fclose($fp);
print $iCount;
?>
count.txtを変数化しました。$db
そして$iCount=fgets($fp,filesize($db));
にしたらカウントが上がりました。
php5です
0042nobodyさん2007/11/06(火) 17:01:40ID:???
それは関係ない
0043nobodyさん2007/11/06(火) 18:33:16ID:???
>>41
34氏と40氏のレスが全てだと思う
インクリメント演算子は数値型(intその他)の他に文字型(string)に対しても
有効なんだけど、NULL、boolean以外にコントロールコードを含む文字列に
対しては無効。
だから、PHPスクリプトに読ませるファイルのデータにも注意しないとね。
例えば初期値0を書き込んだファイルの16進ダンプを取った時に
 30
のみ書かれている場合は良いけど、その後ろにCR+LFやLFが付いている
 30 0d 0a 又は 30 0a
などのデータは余分なコントロールコードを排除しないかぎり
そのままではインクリメント演算子で加算はできないよ。
0044nobodyさん2007/11/07(水) 12:10:07ID:???
urlencode()ではなくrawurlencode()を使わなくてはいけないケース
(またはその逆のケース)って、どういう場合が考えられますか?
0045nobodyさん2007/11/09(金) 18:37:25ID:/x/z4zSE
質問お願いします。

200711 2007101 などを
20070101 20071001 に
変換する関数とかってないでしょうか?

ない場合どうやって分離するか教えてください。
0046nobodyさん2007/11/09(金) 18:40:13ID:/x/z4zSE
あ、phpのバージョンは4.3.10です。
0047nobodyさん2007/11/09(金) 18:41:57ID:???
法則性が見出せない
0048nobodyさん2007/11/09(金) 18:49:12ID:???
2007年1月1日がきたら「200711」になるし
2007年1月10日がきたら「2007110」になるし
2007年10月1日がきたら「2007101」になるし
2007年10月10日がきたら「20071010」になるし
0049nobodyさん2007/11/09(金) 18:51:54ID:???
>>45
例えば2007121が
20071201、20071021のどちらかを見分けられないから無理ぽ
取得する時にそのようにするしかないかと
0050nobodyさん2007/11/09(金) 18:53:49ID:???
20071021じゃなくて20070121でした
0051nobodyさん2007/11/09(金) 19:31:44ID:???
>>49
そっか(´・ω・`)

ありがとうございました。
0052nobodyさん2007/11/10(土) 00:26:51ID:???
mb_convert_kana て、
PHP5.24では使えないのでしょうか。
4.4.1のサーバーで使えてたファイルを
PHP5.24にアップしたら、エラーがでます。
メールフォームで全角で入力された文字を、
次の確認画面で、半角で表示させたいのですが、
もしmb_convert_kanaが使えないなら、他の方法はありますでしょうか。。。
0053nobodyさん2007/11/10(土) 01:54:48ID:???
>>52

mb_convert_kanaはわからんけど、

preg_replaceでがんばってみては。

http://jp2.php.net/preg_replace

もしくは全角が入力されてたらエラーページにいくようにしたりとか。
携帯向けってわけじゃないなら、JavaScriptあたりで、全角のチェックいれてみたり。
携帯だったら、inputタグにistyleとか要素突っ込めば、IMEのデフォルトを半角に出来たりしたきがする。
0054nobodyさん2007/11/10(土) 02:25:51ID:???
>>52
使えるよ、変換できるよ
そのサーバーでmbstringが有効になっていて、かつ、mb_convert_kanaに
適切なオプションを引数として渡して駄目ならわからん
0055nobodyさん2007/11/10(土) 09:18:23ID:???
>>52

>>54が使えるっていってるし、とりあえず、
phpinfo();
あたりでmbstringが有効になってるか確認することが必要なのかね。
0056nobodyさん2007/11/10(土) 10:43:48ID:???
エラーが出た時、解決の為の一番のヒントは、そのエラーメッセージの中にある
0057nobodyさん2007/11/10(土) 11:31:39ID:???
みなさんご丁寧にありがとうございます。

phpinfo();でみたところ、
mbstriongが有効になってませんでしたorz
preg_replace、やってみましたが、どう使えばいいのか・・・(汗)。

たとえば身長を全角で入れて、その数字をわり算したいのですが、
全角だとそのわり算部分でエラーがでるので、
半角に事前に変換した上で、わり算に持っていきたいのです。
無難にjavaスクリプトでエラーチェックしたほうがよいのかもですね。。。
0058nobodyさん2007/11/10(土) 12:02:20ID:kqDw9Pxy
PHP 5.2.5 が出てたのでage
0059nobodyさん2007/11/11(日) 00:35:28ID:???
>>57

おそくなっちゃったけど

たとえば、全角が表示されてたときにエラーページに行くためのフラグを立てるだけだったら、

if( preg_match("/^[0-9]*$/", $_POST["sincho"]) ){
//半角数字で記述されてた場合

}else{
//それ以外のまちがった記述の場合
}

とかにするとかかな。

preg_replaceで置換する場合は

$str = preg_replace("/A/", "A", $_POST["shincho"]);

とかやると、全角Aで書かれた文字が半角Aになる。
変換表を作って変換させなきゃいけなくてうざいけど。

そして、もっと効率のいい方法があるきがするけど、思いつかなかった。
0060nobodyさん2007/11/12(月) 00:29:44ID:jDp7PoYP
C言語歴2ヶ月なんですが最初にCでCGIを作るのはむずかしいと聞いて
PHPをやろうと思いどうすればできるのかを
調べたのですがどうすればPHPを使えるのかがよくわかりません・・・
apacheを使ってやろうとしているのですが
あるサイトでhttpd.confの中にある文を書き加えるというのがあり
やったのですが上書き保存しようとすると
「フォルダを作成できません。パスおよびファイル名が正しいか
確認してください」と出てきます・・・
それとapacheをstartさせてもerrorと出てきてしまい
どうすることもできません。
わかる方教えてください。
0061nobodyさん2007/11/12(月) 00:48:04ID:???
まずエディタの使い方がおかしい
0062nobodyさん2007/11/12(月) 02:37:46ID:hPj5yJAt
>>61
お返事ありがとうございます。
どこがおかしいのでしょうか・・・?
ちなみにhttpd.confの書き換えのやつは保存というか
無理矢理ぶち込んでできたんですが相変わらず
エラーと出ます・・・
というかずっとググってたんですがyahooで検索してみたら
PHPエディタというのが出てきたんですが
初心者はこっちでやったほうがいいんでしょうか
■ このスレッドは過去ログ倉庫に格納されています