2011-02-26 22 views
25

cuando utilizo esto:cómo pasar una variable a través de la función require() o include() de php?

require("diggstyle_code.php?page=$page_no"); 

la advertencia es: no pudo abrir la secuencia: Ningún error en C: \ xampp \ htdocs \ 4ajax \ gallery_core.php en la línea 198

y el error es:

Failed opening required 'diggstyle_code.php?page=1' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\4ajax\gallery_core.php on line 198 

valor de la variable $page_no se recoge de antemano.

Pero si omito el '?page=$page_no part' del argumento de la función require, no se muestra ningún error o advertencia.

Necesito pasar la variable cuando uso la función require().

+0

@Tomalak Geret'kal, i soy nuevo por favor aclara lo que dices. –

+0

Lea las preguntas frecuentes (http://stackoverflow.com/faq), particularmente la sección bajo el encabezado "¿Cómo hago preguntas aquí?". –

Respuesta

45

require() y include() abrirán el archivo correspondiente a la ruta/nombre que reciben.

Lo que significa que, con su código, debería tener un archivo llamado diggstyle_code.php?page=1 en su disco. Obviamente ese no es el caso, entonces falla.

Citando la página Variable scope del Manual de PHP:

El alcance de una variable es el contexto en el que se define. En su mayor parte, todas las variables PHP solo tienen un alcance único. Este único alcance abarca archivos incluidos y necesarios también.

En su caso, no necesita pasar la variable.Si tiene una variable en su secuencia de comandos actual, también existirá en la secuencia de comandos que incluya, fuera de las funciones, que tienen su propio alcance.

En su script principal, usted debe tener:

$page_no = 10; 
require 'diggstyle_code.php'; 

Y en diggstyle_code.php:

echo $page_no; 
// Or work with $page_no the way you have to 

Recuerde que incluyendo/que requiere un archivo es exactamente lo mismo que copiar y pegar su contenido en la línea que se requiere.

+0

muchas gracias. –

+0

De nada :-) Diviértete! –

+1

esto solo funcionará para el código con auto_globals activado. las variables pasadas a través de la cadena de consulta están en la matriz superglobal '$ _GET' (o' $ _REQUEST' para ese asunto) – knittl

8

esto debería funcionar, pero es un truco muy sucio:

$_GET['page'] = $page_no; 
require('diggstyle_code.php'); 

es probable que desee refactorizar el código para utilizar las funciones y/u objetos y llamarlos desde sus archivos en lugar de incluirlos (espaguetis alerta de código)

+0

+1 para "llamarlos desde sus archivos en lugar de incluirlos" – chelmertz

+0

1) "refactorizar su código": ¿qué significa? 2) 'llámalos de tus archivos', ¿qué quieres decir? 3) 'alerta de código de espagueti' - ¿el código se vuelve torpe? –

+1

@sof_user: 1) restructure su código para que sea mejor usable y mantenible sin cambiar el comportamiento 2) cree funciones, instálelas y luego llámelas desde sus otros archivos donde sea necesario 3) el código se vuelve imposible de mantener y un desastre (como spaghettis) – knittl

1

require no extrae el archivo del servidor web; en su lugar, debe hacer referencia a un archivo en el sistema de archivos.

Llamando a include o require solo le dice a PHP que pegue el contenido del archivo dado en su código en este lugar, nada más que eso.

1

require() no realiza una llamada HTTP. Todo lo que hace es abrir el archivo desde el disco e incluir el código en la posición de la llamada. Así que simples variables locales son suficientes.

0

require, require_once, include e include_once intenten incluir archivos del sistema de archivos en el archivo actual.

Como no hay archivos llamados diggstyle_code.php? Page = 1, es totalmente lógico que PHP no pueda encontrarlo.

No puede pasar los valores de esa manera, sin embargo, cualquier variable declarada en el archivo actual será accesible en los archivos incluidos.

1

Si su variable es global, no hay necesidad de "pasarla", ya está allí: PHP variable scope.

La respuesta es, no haga nada, si $ page_no existe en el archivo al que llama require(), estará disponible en el archivo incluido.

-1

he tenido este problema y me di cuenta si se utiliza http: // en la URL, entonces no funciona

0

si he entendido bien, lo que necesita es llamar al archivo diggstyle_code.php pasar un argumento , para que nadie pueda llamar a ese archivo y hacerlo funcionar, en lugar de su archivo principal. ¿Estoy en lo cierto?

Así suponiendo que su "main.php" tiene las líneas

require("diggstyle_code.php?page=$page_no"); 

que significa que: si alguien llama "main.php" se pone en marcha diggstyle_code.php. Pero si alguien de alguna manera llama directamente al diggstyle_code.php, él/ella no obtendrá nada.

Si estoy en lo cierto en mi entendimiento, una manera de lograr esto, es incluir en el archivo principal de una variable o una constante, que será de ámbito por diggstyle_code.php

Así, por ejemplo: 'main.php'

<?php 
define("_VERIFICATION_", "y"); 
require("diggstyle_code.php"); 
?> 

y ahora diggstyle_code.php

<?php 
if (_VERIFICATION_ == "y") { 
//Here the code should be executed 
} else { 
// Something else 
} 
?> 
0

Aunque esta pregunta es viejo hay otra opción que yo uso que se le falta a esta thr ead. Puede devolver una función desde el archivo requerido, que acepta los argumentos que desea pasar el tiempo:

return function(array $something) { 
    print_r($something); 
} 

y llamarlo con los argumentos cuando se require:

require('file.php')(['some', 'data']); 

// or: 

$context = require('file.php'); 
$context(['some', 'data']); 
Cuestiones relacionadas